mirror of
https://github.com/vonhyou/lisp-interpreter.git
synced 2025-06-08 02:02:01 +00:00
revert
This commit is contained in:
parent
d9453149e0
commit
26072b2897
1 changed files with 14 additions and 18 deletions
32
prol.rb
32
prol.rb
|
@ -20,20 +20,15 @@ module Lisp
|
||||||
program.gsub('(', ' ( ').gsub(')', ' ) ').split
|
program.gsub('(', ' ( ').gsub(')', ' ) ').split
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.make_list(tokens)
|
def self.read_tokens(tokens, lst = [])
|
||||||
lst = []
|
|
||||||
lst << read_tokens(tokens) while tokens[0] != ')'
|
|
||||||
tokens.shift
|
|
||||||
lst
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.read_tokens(tokens)
|
|
||||||
# read expressions from token
|
# read expressions from token
|
||||||
raise SyntaxError, 'Unexpected EOF' if tokens.empty?
|
raise SyntaxError, 'Unexpected EOF' if tokens.empty?
|
||||||
|
|
||||||
case token = tokens.shift
|
case token = tokens.shift
|
||||||
when '('
|
when '('
|
||||||
make_list tokens
|
lst << read_tokens(tokens) while tokens[0] != ')'
|
||||||
|
tokens.shift
|
||||||
|
lst
|
||||||
when ')'
|
when ')'
|
||||||
raise SyntaxError, "Unexpected ')'"
|
raise SyntaxError, "Unexpected ')'"
|
||||||
else
|
else
|
||||||
|
@ -60,15 +55,16 @@ module Lisp
|
||||||
scope.merge op => ->(*args) { args.inject(&op) }
|
scope.merge op => ->(*args) { args.inject(&op) }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
lisp_methods = { 'min': ->(arr) { arr.min },
|
# @global_env.merge {
|
||||||
'max': ->(arr) { arr.max },
|
# 'min' : ->(*args) { args.min },
|
||||||
'car': ->(arr) { arr[0] },
|
# 'max' : ->(*args) { args.max },
|
||||||
'cdr': ->(arr) { arr[1..-1] },
|
# 'car' : ->(arr) { arr[0] },
|
||||||
'cons': ->(arr) { arr },
|
# 'cdr' : ->(arr) { arr[1..-1] },
|
||||||
'quote': ->(*args) { args },
|
# 'cons' : ->(arr) { arr },
|
||||||
'print': ->(arg) { p arg },
|
# 'quote' : ->(arr) { arr },
|
||||||
'begin': ->(*_args) { true }}
|
# 'print' : ->(arg) { p arg },
|
||||||
@global_env.merge lisp_methods
|
# 'begin' : ->(*_args) { true }
|
||||||
|
# }
|
||||||
end
|
end
|
||||||
|
|
||||||
##### Lisp Eval
|
##### Lisp Eval
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue