Examples
[cc1516.git] / examples / demo / printparse.spl
diff --git a/examples/demo/printparse.spl b/examples/demo/printparse.spl
new file mode 100644 (file)
index 0000000..68de2fb
--- /dev/null
@@ -0,0 +1,87 @@
+toInt(x) :: Char -> Int{
+       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 { if(x == '9'){ return 9;
+       } else { return -1; }}}}}}}}}}
+}
+
+toChar(x) :: Int -> Char{
+       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 { if(x == 9){ return '9';
+       } else { return '0'; }}}}}}}}}}
+}
+
+isDigit(x) :: Char -> Bool {
+       return toInt(x) != -1;
+}
+
+strToInt(x) :: [Char] -> Int {
+       [Char] xs = x;
+       var i = 0;
+       var m = 1;
+       if(!isEmpty(x)){
+               if(xs.hd == '-'){
+                       xs = xs.tl;
+                       m = -1;
+               }
+
+               while(!isEmpty(xs)){
+                       i = i*10 + toInt(xs.hd);
+                       xs = xs.tl;
+               }
+       }
+       return i*m;
+}
+
+printList(p, l) :: (a -> Void) -> [a] -> Void {
+    print('[');
+       if(!isEmpty(l)){
+               p(l.hd);
+               l = l.tl;
+       }
+       while(!isEmpty(l)){
+               print(", ");
+               p(l.hd);
+               l = l.tl;
+       }
+       print("]\n");
+}
+
+printInt(x) {
+       [Char] l = [];
+       if(x < 0){
+               print('-');
+               x = -x;
+       }
+       while(x > 0){
+               l = toChar(x % 10) : l;
+               x = x / 10;
+       }
+       print(l);
+}
+
+printBool(b) :: Bool -> Void {
+       print(b);
+}
+
+main(){
+       var num = "-1234";
+
+       printList(printInt, [32, 4, strToInt(num)]);
+       printList(printBool, [True, False, True, True]);
+}