Haskell, лямбда-исчисление для оценки
(рисунок 1)
Часть простого типизированного лямбда-исчисления (рисунок 1), это реализовано в Haskell, как указано ниже.
evaluate expression = do
case expression of
(Application (Lambda x ltype term) value) | isValue value = True -> substitute term x value
(Application value e2) | isValue value = True -> let e22 = evaluate e2 in Application value e22
(Application e1 e2) -> let e11 = evaluate e1 in Application e11 e2
Однако, это не работает для этих тестов,
1) print (evaluate (Application (Var "x") (Var "y")))
2) print (evaluate (Application (Constant 3) (Var "y"))
"(Constant 3) является значение"
Но для первый тестовый пример, я знаю, потому что (Var "x")
как e1
является терминалом, поэтому он не может перейти. Означает ли это, что я должен добавить случай Stuck
? Но я хочу вернуть результат, предполагающий успех переходов, если это возможно.
Спасибо заранее ...
Замечание о стиле, 'x == True' всегда избыточно и его можно просто заменить на' x'. – asm