別の質問で、Bobは型指定されていないラムダ計算の次のインタープリターを提示しました。
data Expr = Var String | Lam String Expr | App Expr Expr
data Value a = V a | F (Value a -> Value a)
interpret :: [(String, Value a)] -> Expr -> Value a
interpret env (Var x) = case lookup x env of
Nothing -> error "undefined variable"
Just v -> v
interpret env (Lam x e) = F (\v -> interpret ((x, v):env) e)
interpret env (App e1 e2) = case interpret env e1 of
V _ -> error "not a function"
F f -> f (interpret env e2)
Ivan Zakharyaschev は、このインタプリタは値による呼び出しであると述べましたF f -> f (interpret env e2)
。call-by-name インタープリターの実装は、上記のものとどのように異なるでしょうか?
Plotkinは、1970 年代にラムダ計算を評価するための名前による呼び出しと値による呼び出しの戦略を研究しました。