Haskell - 在运行时更改变量

时间:2017-11-27 14:13:59

标签: haskell

如何在运行时更改变量?

我明白了:

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

1 个答案:

答案 0 :(得分:1)

您可以基于现有环境创建一个新环境,其中变量绑定到新值:

erweiternBelegung :: Variable -> Bool -> Variables -> Variables
erweiternBelegung v b vs = \v' -> if v == v' then b else vs v'

并使用它来确保在Fueralle情况下,当ausdruck同时为varTrue时,False成立:

...
evaluate (Fueralle var ausdruk) belegung =
  evaluate ausdruk (erweiternBelegung var True belegung) &&
  evaluate ausdruk (erweiternBelegung var False belegung)

存在量词Esgibt将相同,但&&将替换为||