1- $: . unshift File . dirname ( __FILE__ )
1+ $LOAD_PATH . unshift File . dirname ( __FILE__ )
22
3- require " lisp/version"
4- require " lisp/repl"
3+ require ' lisp/version'
4+ require ' lisp/repl'
55
66module Lisp
7- def self . eval string
7+ def self . eval ( string )
88 execute parse tokenize string
99 end
1010
11- def self . tokenize string
12- string . gsub ( "(" , " ( " ) . gsub ( ")" , " ) " ) . split
11+ def self . tokenize ( string )
12+ string . gsub ( '(' , ' ( ' ) . gsub ( ')' , ' ) ' ) . split
1313 end
1414
15- def self . parse tokens , tree = [ ]
16- raise " unexpected: eof" if tokens . size . zero?
15+ def self . parse ( tokens , tree = [ ] )
16+ raise ' unexpected: eof' if tokens . size . zero?
1717
1818 case token = tokens . shift
19- when "("
20- while tokens [ 0 ] != ")" do
21- tree . push parse tokens
22- end
19+ when '('
20+ tree . push parse tokens while tokens [ 0 ] != ')'
2321 tokens . shift
2422 tree
25- when ")"
26- raise " unexpected: )"
23+ when ')'
24+ raise ' unexpected: )'
2725 else
2826 atom token
2927 end
3028 end
3129
32- def self . atom token
30+ def self . atom ( token )
3331 case token
3432 when /\d /
3533 token . to_f % 1 > 0 ? token . to_f : token . to_i
@@ -38,7 +36,7 @@ def self.atom token
3836 end
3937 end
4038
41- def self . execute expression , scope = global
39+ def self . execute ( expression , scope = global )
4240 return scope . fetch ( expression ) { |var | raise "#{ var } is undefined" } if expression . is_a? Symbol
4341 return expression unless expression . is_a? Array
4442
@@ -48,14 +46,14 @@ def self.execute expression, scope = global
4846 scope [ var ] = execute expression , scope
4947 when :lambda
5048 _ , params , expression = expression
51- lambda { | *args | execute expression , scope . merge ( Hash [ params . zip ( args ) ] ) }
49+ -> ( *args ) { execute expression , scope . merge ( Hash [ params . zip ( args ) ] ) }
5250 when :if
5351 _ , test , consequent , alternative = expression
54- expression = if execute test , scope then consequent else alternative end
52+ expression = execute test , scope ? consequent : alternative
5553 execute expression , scope
5654 when :set!
57- _ , var , expression = expression
58- if scope . has_key ?( var ) then scope [ var ] = execute expression , scope else raise "#{ var } is undefined" end
55+ _ , var , expression = expression
56+ scope . key ?( var ) ? ( scope [ var ] = execute expression , scope ) : ( raise "#{ var } is undefined" )
5957 when :begin
6058 _ , *expression = expression
6159 expression . map { |expression | execute expression , scope } . last
@@ -69,7 +67,7 @@ def self.global
6967 @scope ||= begin
7068 operators = [ :== , :"!=" , :"<" , :"<=" , :">" , :">=" , :+ , :- , :* , :/ ]
7169 operators . inject ( { } ) do |scope , operator |
72- scope . merge operator => lambda { | *args | args . inject &operator }
70+ scope . merge operator => -> ( *args ) { args . inject &operator }
7371 end
7472 end
7573 end
0 commit comments