]> gitweb.factorcode.org Git - factor.git/blob - unmaintained/lambda/lambda.factor
Initial import
[factor.git] / unmaintained / lambda / lambda.factor
1 #! An interpreter for lambda expressions, by Matthew Willis
2 USING: io strings hashtables sequences namespaces kernel ;
3 IN: lambda
4
5 : lambda-print ( name/expr -- )
6     dup string? 
7     [   dup lambda-names get hash expr>string " " swap 
8         append append "DEF " swap append 
9     ] [ expr>string "=> " swap append 
10     ] if print flush ;
11
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 ;
15
16 : lambda-eval ( name/expr -- name/expr )
17     dup string? [ normalize ] unless ;
18
19 : lambda-boot ( -- )
20     #! load the core lambda library
21     H{ } clone lambda-names set lambda-core
22     [ lambda-parse lambda-define lambda-eval lambda-print ] each ;
23  
24 : lambda ( -- )
25     lambda-names get [ lambda-boot ] unless
26     readln dup "." = [ drop ] [
27         lambda-parse lambda-define lambda-eval lambda-print lambda
28     ] if ;