1 #! An interpreter for lambda expressions, by Matthew Willis
2 USING: io strings hashtables sequences namespaces kernel ;
5 : lambda-print ( name/expr -- )
7 [ dup lambda-names get hash expr>string " " swap
8 append append "DEF " swap append
9 ] [ expr>string "=> " swap append
12 : lambda-define ( parse-result -- name/expr )
13 #! Make sure not to evaluate definitions.
14 first2 over [ over lambda-names get set-hash ] [ nip ] if ;
16 : lambda-eval ( name/expr -- name/expr )
17 dup string? [ normalize ] unless ;
20 #! load the core lambda library
21 H{ } clone lambda-names set lambda-core
22 [ lambda-parse lambda-define lambda-eval lambda-print ] each ;
25 lambda-names get [ lambda-boot ] unless
26 readln dup "." = [ drop ] [
27 lambda-parse lambda-define lambda-eval lambda-print lambda