Tôi đã viết một số mã trong Haskell để mô hình hóa logic mệnh đềMở rộng logic mệnh đề để modal logic trong Haskell
data Formula = Prop {propName :: String}
| Neg Formula
| Conj Formula Formula
| Disj Formula Formula
| Impl Formula Formula
| BiImpl Formula Formula
deriving (Eq,Ord)
Tuy nhiên, không có cách nào tự nhiên để mở rộng này để phương thức logic, vì kiểu dữ liệu được đóng lại. Vì vậy, tôi nghĩ tôi nên sử dụng các lớp học thay thế. Bằng cách đó, tôi có thể dễ dàng thêm các tính năng ngôn ngữ mới trong các mô-đun khác nhau sau này. Vấn đề là tôi không biết chính xác cách viết nó. Tôi muốn một cái gì đó như sau
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
Sai lầm là tất nhiên trong định nghĩa của Liên từ. Tuy nhiên, không rõ ràng với tôi làm thế nào tôi có thể viết lại nó để nó hoạt động.
Nếu bạn thích đọc sách, bạn có thể tìm thấy [này] (http://okmij.org/ftp/tagless-final/course/lecture .pdf) hữu ích. – user2407038