- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
void my_char_plus(const void *a, const void *b, void *c)
{
char tmp = (*(char*)a + *(char*)b);
memcpy(c,(void*)(&tmp),sizeof(char));
}
void my_char_minus(const void *a, const void *b, void *c)
{
char tmp = (*(char*)a - *(char*)b);
memcpy(c,(void*)(&tmp),sizeof(char));
}
void operation(const void *funct(const void*,const void*,void*),
const void *a, const void *b, void *c )
{
funct(a,b,c);
}
char ret_last_arg(const void *funct(const void*,const void*,void*),
const void *a, const void *b)
{
char c;
funct(a,b,(void*)&c);
return c;
}
int main(void)
{
char a, b;
a = 5; b = 7;
void *plus = &my_char_plus; char c;
operation(plus, (const void*)&a, (const void*)&b, (void*)&c);
printf("5 + 7 = %i\n", c);
void *minus = &my_char_minus;
char d = ret_last_arg(minus, (const void*)&a, (const void*)&b);
printf("5 - 7 = %i\n", d);
// LISP LISP LISP
#define LISP(ar,aa,bb) ret_last_arg(ar, (const void*)&(char){aa}, (const void*)&(char){bb} )
char e = LISP(plus,2,LISP(plus,2,2));
printf("(+ 2 (+ 2 2 ) ) = %i\n", e);
return 0;
}