+digitToChar(x){
+ x = x % 10;
+ if(x == 0){ return '0'; }
+ else { if(x == 1){ return '1'; }
+ else { if(x == 2){ return '2'; }
+ else { if(x == 3){ return '3'; }
+ else { if(x == 4){ return '4'; }
+ else { if(x == 5){ return '5'; }
+ else { if(x == 6){ return '6'; }
+ else { if(x == 7){ return '7'; }
+ else { if(x == 8){ return '8'; }
+ else { return '9'; }}}}}}}}}
+}
+
+printInt (i){
+ if(i > 0){
+ print(digitToChar(i));
+ printInt(i/10);
+ }
+}
+
+printIntList (l){
+ print('[');
+ if(!isEmpty(l)){
+ printInt(l.hd);
+ l = l.tl;
+ }
+ while(!isEmpty(l)){
+ print(',');
+ printInt(l.hd);
+ l = l.tl;
+ }
+ print(']');
+}
+
+printIntListRP(l){
+ if(!isEmpty(l)){
+ print(',');
+ printInt(l.hd);
+ printIntListRP(l.tl);
+ }
+}
+
+printIntListR(l){
+ print('[');
+ if(!isEmpty(l)){
+ printInt(l.hd);
+ l = l.tl;
+ }
+ printIntListRP(l);
+ print("]\n");
+}
+
+map(f, l){
+ if(isEmpty(l)){
+ return [];
+ } else {
+ return f(l.hd) : map(f, l.tl);
+ }
+}
+
+plus(x, y){
+ return x + y;
+}
+
+ap(f, x){
+ return f(x);
+}
+
main(){
- var b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- return;
+ [Int] l1 = 1 : 2 : [];
+ var fun = plus(1);
+
+// var b = ap(fun, 3);
+ var res1 = map(fun, l1);
+// var res2 = map(fun, res1);
+
+// printIntListR(l1);
+// printIntListR(res1);
+// printIntListR(res2);
+
+
+
}