pythonで評価器的な物を書いて昔を懐かしんだ。
昔こういうの書いてましたね。
以下のような感じで実行する感じです。
# 10 Application.run([Value(10)]) # 10 + 20 Application.run([BOp("+", Value(10), Value(20))]) # x = 10; x + 1 Application.run([Assign("x", 10), BOp("+", Var("x"), Value(1))]) # sq = lambda x * x; sq(10) Application.run([ Assign("sq", Lambda(["x"], BOp("*", Var("x"), Var("x")))), Apply("sq", Value(10)) ]) # fact = (lambda x: if (x < 0) then 1 else x * fact(x-1); fact(10)) Application.run([ Assign("fact", Lambda(["x"], If(BOp("<", Var("x"), Value(1)), Value(1), BOp("*", Var("x"), Apply("fact", BOp("-", Var("x"), Value(1))))))), Apply("fact", Value(10)) ]) # even = (lambda x: if (x == 0) then T else odd(x-1)); # odd = (lambda x: if (x == 0) then F else even(x-1)); # odd(5) # even(4) # even(11) Application.run([ Assign("even", Lambda(["x"], If(BOp("==", Var("x"), Value(0)), Value(True), Apply("odd", BOp("-", Var("x"), Value(1)))))), Assign("odd", Lambda(["x"], If(BOp("==", Var("x"), Value(0)), Value(False), Apply("even", BOp("-", Var("x"), Value(1)))))), Apply("odd", Value(5)), Apply("even", Value(4)), Apply("even", Value(11)) ])