我目前正在撰寫一個基于 Haskell 的替換函式(Lambda Calculus)。
data Term = Var String
| Application Term Term
| Lambda String Term
該函式接受一個 Term t1、 Strings和一個 Term t2。該功能應該更換的每次出現s在t1與t2。
subst :: Term -> String -> Term -> Term
subst (Lambda y e) x v = if x == y then (Lambda y e) else let e' = (subst e x v) in (Lambda y e')
subst (Var y) x v = if x == y then v else (Var y)
subst (Application e1 e2) x v = Application (subst e1 x v) (subst e2 x v)
當我嘗試呼叫該函式時,我收到以下資訊:
輸入
subst (Lambda "x" (Application (Var "x") (Var "y"))) "y" (Var "f")
輸出
subst (Lambda "x" (Application (Var "x") (Var "y"))) "y" (Var "f")
:: Term
我是輸入錯誤還是我的功能有問題?
uj5u.com熱心網友回復:
當 GHCI 將結果顯示為 時foo :: SomeType,它告訴您該運算式foo產生了一個 type 的結果SomeType,但它無法列印更多細節,因為 SomeType 不支持 Show。因此,您的函式顯然已成功回傳了一些值,但您不知道是什么值。您可以通過對結果進行模式匹配來檢查它。但是您可能只想添加deriving Show到型別定義中,以便 GHCI 可以列印它獲得的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404592.html
標籤:
