【发布时间】:2014-09-28 10:31:27
【问题描述】:
我在 Haskell 中编写了一些代码来建模命题逻辑
data Formula = Prop {propName :: String}
| Neg Formula
| Conj Formula Formula
| Disj Formula Formula
| Impl Formula Formula
| BiImpl Formula Formula
deriving (Eq,Ord)
但是,由于数据类型是封闭的,因此无法自然地将其扩展到模态逻辑。 因此,我认为我应该改用类。这样,我以后可以很容易地在不同的模块中添加新的语言特性。问题是我不完全知道如何写它。我想要类似下面的东西
type PropValue = (String,Bool) -- for example ("p",True) states that proposition p is true
type Valuation = [PropValue]
class Formula a where
evaluate :: a -> Valuation -> Bool
data Proposition = Prop String
instance Formula Proposition where
evaluate (Prop s) val = (s,True) `elem` val
data Conjunction = Conj Formula Formula -- illegal syntax
instance Formula Conjunction where
evaluate (Conj φ ψ) v = evaluate φ v && evaluate ψ v
错误当然在于连词的定义。但是,我不清楚如何重写它以使其正常工作。
【问题讨论】:
-
如果您喜欢阅读,您可能会发现this 很有帮助。
标签: haskell modal-logic