add lambda!

This commit is contained in:
vonhyou 2021-04-14 09:43:28 +08:00
parent 03d405d183
commit 94599c5e4a

View file

@ -91,6 +91,9 @@ def lisp_eval(elem, env = $global_env)
_, cod, if_true, if_false = elem _, cod, if_true, if_false = elem
exp = lisp_eval(cod, env) ? if_true : if_false exp = lisp_eval(cod, env) ? if_true : if_false
lisp_eval exp, env lisp_eval exp, env
elsif elem[0] == :lambda
_, params, body = elem
->(*args) { lisp_eval body, env.merge(Hash[params.zip(args)]) }
else else
args = [] args = []
elem[1..-1].each { |arg| args << lisp_eval(arg, env) } elem[1..-1].each { |arg| args << lisp_eval(arg, env) }
@ -114,4 +117,4 @@ def print_value(value)
puts ";Value: #{value.to_s}" puts ";Value: #{value.to_s}"
end end
# repl() repl()