Haskell-在运行时更改变量
如何在运行时更改变量 我明白了:Haskell-在运行时更改变量,haskell,Haskell,如何在运行时更改变量 我明白了: data Ausdruck = K Wahrheitswert -- Logical constant | V Variable -- Logical Variable | Nicht Ausdruck -- Logical negation | Und Ausdruc
data Ausdruck = K Wahrheitswert -- Logical constant
| V Variable -- Logical Variable
| Nicht Ausdruck -- Logical negation
| Und Ausdruck Ausdruck -- Logical and
| Oder Ausdruck Ausdruck -- Logical or
| Impl Ausdruck Ausdruck -- Logical implied
| Esgibt Variable Ausdruck -- "exist"
| Fueralle Variable Ausdruck -- "all"
deriving (Eq,Show)
type Variables = Variable -> Bool
variables1 :: Variable -> Bool
variables1 (Var N1) = True
variables1 (Var N2) = False
variables1 (Var N3) = True
variables1 (Var N4) = True
variables1 (Var N5) = False
evaluate :: Prop -> Variables -> Bool
evaluate (K bool) belegung = bool
evaluate (V var) belegung = belegung var
evaluate (Nicht ausdruck) belegung = not (evaluate ausdruck belegung)
evaluate (Und ausdruck ausdruck2) belegung = (evaluate ausdruck belegung) && (evaluate ausdruck2 belegung)
evaluate (Oder ausdruck ausdruck2) belegung = (evaluate ausdruck belegung) || (evaluate ausdruck2 belegung)
现在我想添加量词all。所以我想检查一个命题演算,当我把N1改为False时,它是否仍然是真的。
但在运行时如何更改变量
向Marc致意您可以基于现有环境创建一个新环境,并将一个变量绑定到一个新值:
erweiternBelegung :: Variable -> Bool -> Variables -> Variables
erweiternBelegung v b vs = \v' -> if v == v' then b else vs v'
并使用它来确保在Fueralle案例中,当var为真和假时,ausdruck有效:
存在量词Esgibt将是相同的,除了&&将替换为| |.我是否正确理解您希望提供一些用户输入来更改程序的状态,以便variables1 Var N1=False?evaluate已经参数化;您只需将variables1以外的函数作为第二个参数传递。顺便说一句,Füralle是一个完全合法的构造函数名称。
...
evaluate (Fueralle var ausdruk) belegung =
evaluate ausdruk (erweiternBelegung var True belegung) &&
evaluate ausdruk (erweiternBelegung var False belegung)