如何在运行时更改变量?
我明白了:
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)
现在我想添加量词“全部”。所以我想检查一个命题演算,如果它仍然是真的,当我将N1改为False时。 但是如何在运行时更改变量?
最好的问候Marc
答案 0 :(得分:1)
您可以基于现有环境创建一个新环境,其中变量绑定到新值:
erweiternBelegung :: Variable -> Bool -> Variables -> Variables
erweiternBelegung v b vs = \v' -> if v == v' then b else vs v'
并使用它来确保在Fueralle
情况下,当ausdruck
同时为var
和True
时,False
成立:
...
evaluate (Fueralle var ausdruk) belegung =
evaluate ausdruk (erweiternBelegung var True belegung) &&
evaluate ausdruk (erweiternBelegung var False belegung)
存在量词Esgibt
将相同,但&&
将替换为||
。