我目前正在嘗試構建一個lambda微積分求解器,並且在構建AST時遇到了一些小問題。甲演算術語感應定義爲:Haskell AST與遞歸類型
1)一種可變
2)的λ,變量,一個點,一個lambda表達式。
3)括號,lambda表達式,lambda表達式和括號。
我想怎麼做(在第一次嘗試)是這樣的:
data Expr =
Variable
| Abstract Variable Expr
| Application Expr Expr
現在很明顯這是行不通的,因爲變量是不是一個類型的,和抽象變Expr的期望類型。所以,我的哈克解決方案,這是有:
type Variable = String
data Expr =
Atomic Variable
| Abstract Variable Expr
| Application Expr Expr
現在,這實在是煩人,因爲我不喜歡自己的原子變量,但摘要採取字符串,而不是EXPR。有什麼辦法可以讓這個更優雅,並且像第一個解決方案那樣做?
您發現令人厭惡的第二個定義是執行此操作的標準方法。我的建議是,習慣它。你的思維方式與Haskell的類型系統不兼容,所以請繼續並訓練自己。 – luqui