gpt4 book ai didi

haskell - 在 Haskell 中定义逻辑运算符

转载 作者:行者123 更新时间:2023-12-04 17:26:26 25 4
gpt4 key购买 nike

在我的作业中,我必须定义逻辑运算符如下:
使用这个数据结构:

data MyBool = Cierto|Falso deriving (Show,Eq) -- Cierto = True and Falso = False
data PQR = A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z deriving (Show,Eq)
data Formula = VarProp PQR
|Neg Formula -- logic not
|Formula :|: Formula -- logic or
|Formula :&: Formula -- logic and... etc
|Formula :->: Formula
|Formula :<->: Formula deriving (Show,Eq)

我必须定义函数来告诉我给定的公式是真还是假,例如,如果我写 (Cierto :&: Falso)答案必须是: Falso .

根据我的老师的说法,在这种情况下必须调用该函数 :&:并且必须收到 MyBool类型所以我尝试这样实现:
infixr 3 :&:
(:&:) :: MyBool -> MyBool -> MyBool
Cierto :&: x = x
Falso :&: x = Falso

但是当我尝试加载它时,它说:
Invalid type signature

我不知道我在这里做错了什么。

最佳答案

你的教授强制你为 bool 运算符创建一个抽象语法树(AST)。如果您在此之前还没有听说过“抽象语法树”这个词,那么是时候问问某人到底发生了什么。

您实际上想要做的是编写一个类型为 eval 的函数(称为 Formula -> Formula ) .在查看定义时,我也相信您在 data Formula 中留下了一行应该是这样的 VarLiteral MyBool .看起来你 AST 是一种编写在 MyBool 上运行的程序的方式。 's 并支持典型的 bool 运算以及 :->:分配 (?)。

我已经在 Haskell 中编写了一些 AST 评估器(尽管没有这么陈词滥调 :) ),感觉您的问题中缺少一些内容。考虑到我眼前的情况,我对你最好的建议是说这个作业比你想象的要抽象一个层次。

祝你好运

关于haskell - 在 Haskell 中定义逻辑运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8381684/

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