gpt4 book ai didi

haskell - 使用自己的数据类型和映射求解逻辑公式

转载 作者:行者123 更新时间:2023-12-02 21:11:06 28 4
gpt4 key购买 nike

我想用 Haskell 编写一个逻辑公式求解程序。到目前为止,我已经成功地将给定的公式打印为字符串,例如公式

(I (N (Z 'p')) (A (C (Z 'p') (Z 'q')) (Z 'r')))

结果

"(~p => ((p & q) | r))"

其中 I 是蕴涵,A 是替代,C 是连词,N 是否定,Z 是字符。

我的数据类型是这样的:

data Formula = Z Char | V Bool | N Formula 
| K Formula Formula | A Formula Formula
| C Formula Formula | Join Formula Formula

我的问题是我不知道如何编写一个函数,它将使用给定的字符映射和 bool 值来计算公式,我的意思是,例如: [('p', True), ('q', False), ('r', False)]我无法想出一种方法来用一些 True/False 值替换这些字母并检查它。有什么简单的方法可以做到这一点吗?

最佳答案

您可以只传递字符和 bool 值列表并使用 lookup来自 Data.List 的函数:

import Data.List

evaluate :: [(Char, Bool)] -> Formula -> Bool
evaluate mapping (Z sym) =
case lookup sym mapping of
Just v -> v
Nothing -> error $ "Undefined symbol " ++ show v
evaluate _mapping (V v) = v
evaluate mapping (N formula) = not (evaluate mapping formula)
...

为了更有效地表示映射,请使用 Data.Map模块而不是关联列表。

关于haskell - 使用自己的数据类型和映射求解逻辑公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21343542/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com