嗨,我正在嘗試用 Haskell 撰寫一個證明檢查器。表示術語的一種方式如下:
data Term = Const String | Fun String [Term] | Var String
但這似乎不理想,因為 String 可以采用許多值,并且無法驗證函式項的數量。
一種解決方案如下:
data Term a = Const String | Fun a | Var String
data NTFun = S (Term NTFun) | Plus (Term NTFun) (Term NTFun)
type NTTerm = Term NTFun
現在我有一個更通用的 Term 型別,可以隨意實體化它。但是如果我也想抽象出常量符號,它就會變得混亂。
data Term a c = Const c | Fun a | Var String
data NTFun c = S (Term c (NTFun c)) | Plus (Term c (NTFun c)) (Term c (NTFun c))
data NTConst = Zero
type NTTerm = Term (NTFun NTConst) NTConst
似乎必須有更好的方式來表達這一點?謝謝!
uj5u.com熱心網友回復:
你可以變成NTFun一個函子,抽象出它的提及Term和它的任何其他變數,并讓Term自己打結。
data Term f c = Const c | Fun (f (Term f c)) | Var String
data NTFun term = S term | Plus term term
data NTConst = Zero
type NTTerm = Term NTFun NTConst
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342915.html
標籤:哈斯克尔
上一篇:Haskell的簡化函式
