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)