Let me show you an example to prove it.
The example is limited to composition of unary functions defined on int
   u::Int->Int
   v::Int->Int
   o ::(Int->Int)->(Int->Int)->(Int->Int)
   o u v= \x->u(v(x))


#include <stdio.h>
#include <conio.h>

#include "functional.h"

int f1(int x){
        return x+x;
}
int f2(int x){
        return 2*x;
}
int g1(int x){
        return x+1;
}
int g2(int x){
        return x-1;
}

#define P1 P0 int main(){
#define P2 P1      printf("%d,%d,%d\n",2,
#define P3           O(f1,f2,P2)(2),
#define P4           O(g1,g2,P3)(3));
#define P5 P4      getch();
#define P6 P5 }

MAIN P6


Here is the file functional.h

#define FUNC2(x,y) x##y
#define FUNC1(x,y) FUNC2(x,y)
#define FUNC(x) FUNC1(x,__COUNTER__)

#define COMP(c,f,g,p) \
         int c (int x) { return f(g(x)); }; \
         p \
         c

#define O(f,g,p)  COMP( FUNC(a), f, g, p)

#define P0
#define MAIN

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to