【问题标题】:Haskell - Change variable during runtimeHaskell - 在运行时更改变量
【发布时间】:2017-11-28 03:05:44
【问题描述】:

如何在运行时更改变量?

我知道了:

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 时,我想检查一个命题演算是否仍然正确。 但是如何在运行时更改变量?

最好的问候马克

【问题讨论】:

  • 我是否正确理解您想要提供一些改变程序状态的用户输入,例如variables1 (Var N1) = False
  • evaluate 已经参数化;您只需将variables1 以外的函数作为第二个参数传递。
  • 顺便说一句,Füralle 是一个完全合法的构造函数名称。

标签: haskell


【解决方案1】:

您可以在现有环境的基础上创建新环境,并将变量绑定到新值:

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

并使用它来确保在 Fueralle 的情况下,当 varTrueFalse 时,ausdruck 成立:

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

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

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多