lambdas without params, lambdas are now passed as vars instead of funcs
authorpimjager <pim@pimjager.nl>
Thu, 26 May 2016 16:18:51 +0000 (18:18 +0200)
committerpimjager <pim@pimjager.nl>
Thu, 26 May 2016 16:18:51 +0000 (18:18 +0200)
examples/tempTest.spl
grammar/grammar.txt
parse.icl
sem.icl

index a5ac57d..6ef5e3d 100644 (file)
@@ -24,10 +24,18 @@ l2(x) :: Int -> Void {
     return;
 }
 
+repeat(f, n) {
+    var x = n;
+    while(x > 0) {
+        f();
+        x = x-1;
+    }
+}
+
 main() {
     //var f = \x->print(x);
-    var z = map(\x->print(3), 1:2:[]);
-    var x = print(3);
+    //var z = map(\x->print(3), 1:2:[]);
+    repeat(\->print(0), 5);
     //var x = foldr(\x y->x+y, 0, 1:2:[]);
     //print(x);
     return;
index b399311..06250b1 100644 (file)
@@ -27,7 +27,7 @@
                  | '[]' <Expr>
                  | '(' <Expr> ',' <Expr> ')'
                  | '"' <char> '"'
-<LamdaExpr>    ::= '\'<id>+ '->' <Expr>
+<LamdaExpr>    ::= '\'<id>* '->' <Expr>
 <FieldSels>    ::= ('.' ('hd'|'tl'|'fst'|'snd))*
 <FunCall>      ::= <id> ['(' <ActArgs>+ ')']
 <ActArgs>      ::= <Expr> [',' ActArgs]
index 426e47e..5af08db 100644 (file)
--- a/parse.icl
+++ b/parse.icl
@@ -159,7 +159,7 @@ parseValueExpr = //Operators in order of binding strength
 
 parseLambda :: Parser Token Expr
 parseLambda = LambdaExpr <$> peekPos 
-                        <*> (satTok BackslashToken *> some parseIdent)
+                        <*> (satTok BackslashToken *> many parseIdent)
                         <*> (satTok ArrowToken *> parseExpr)
 
 makeStrExpr :: Pos [Char] -> Expr
diff --git a/sem.icl b/sem.icl
index 47b6c1a..2f9e7d6 100644 (file)
--- a/sem.icl
+++ b/sem.icl
@@ -128,7 +128,7 @@ instance unfoldL_ Expr where
         fresh >>= \(IdType n) ->
         let f = ("2lambda_"+++n) in
         let fd = FunDecl p f args Nothing [] [ReturnStmt $ Just e] in 
-        let fe = FunExpr p f [] [] in
+        let fe = VarExpr p (VarDef f []) in
         pure ([fd], fe)
     unfoldL_ (FunExpr p f es fs) = flattenT <$> mapM unfoldL_ es >>= \(fds, es_)->
         pure (fds, FunExpr p f es_ fs)