aboutsummaryrefslogtreecommitdiff
path: root/src/boot/ast.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2010-05-10 02:32:04 +0000
committerdos-reis <gdr@axiomatics.org>2010-05-10 02:32:04 +0000
commitcc1b3ad0c3e2375bff3d0d736b988d41840dcadd (patch)
tree4d92d50afb94d5e62303733bc35b5635163f5f39 /src/boot/ast.boot
parentfff23d752812e2ae22bebc21d24c42bb145a916e (diff)
downloadopen-axiom-cc1b3ad0c3e2375bff3d0d736b988d41840dcadd.tar.gz
Add lambda expression syntax to Boot.
* boot/parser.boot (bpLambda): New. * boot/ast.boot (bfLambda): New. * boot/tokens.boot: Add "+->" as token. * interp/cparse.boot: Use lambda expression syntax. * interp/c-util.boot: Likewise.
Diffstat (limited to 'src/boot/ast.boot')
-rw-r--r--src/boot/ast.boot8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/boot/ast.boot b/src/boot/ast.boot
index 3ad7d4d8..878bb755 100644
--- a/src/boot/ast.boot
+++ b/src/boot/ast.boot
@@ -112,6 +112,7 @@ structure %Ast ==
%ConstantDefinition(%Name,%Ast) -- x == y
%Definition(%Name,%Ast,%Ast) -- f x == y
%Macro(%Name,%List,%Ast) -- m x ==> y
+ %Lambda(%List,%Ast) -- x +-> x**2
%SuchThat(%Ast) -- | p
%Assignment(%Ast,%Ast) -- x := y
%While(%Ast) -- while p -- iterator
@@ -742,6 +743,13 @@ bfLessp(l,r)==
l = 0 => ["PLUSP",r]
r = 0 => ["MINUSP", l]
["<",l,r]
+
+bfLambda(vars,body) ==
+ -- FIXME: Check that we have only names in vars.
+ vars :=
+ bfTupleP vars => rest vars
+ [vars]
+ ["LAMBDA",vars,body]
bfMDef (op,args,body) ==
argl :=