【发布时间】:2016-04-26 20:08:45
【问题描述】:
我必须编写一个谓词 parse(FIn, FOut),它采用包含序言操作数“+”、“”和“;”的逻辑公式作为参数 FIn 和包含“非”、“与”和“或”的逻辑公式,而不是作为参数 FOut 的序言操作数。如果 FIn 和 FOut 等价,则谓词必须返回 true。
例如 parse(+(a, b), not(and(a, b))) => true
要检查公式是否被否定,我可以写
parse(FIn, FOut) :- isNeg(FIn, FOut).
isNeg(\+(F1), not(F2)).
但现在我不知道如何检查 "," 和 "and" 和 ";"和“或”。 如果有人有一些提示,那就太好了。
【问题讨论】:
-
类似
parse(','(A, B), and(Ap, Bp)) :- parse(A, Ap), parse(B, Bp).或者简单地说,parse((A, B), and(Ap, Bp)) :-...等 -
这个检查到底是什么? parse(A, Ap) 是什么意思?
-
我展示的是你如何递归解析,这是解析
+ (a,b)之类的表达式所必需的,或者更复杂的+ (a, (b ; c))(我假设你需要处理,或者不?)。parse(A, Ap)表示A表示的表达式将进一步解析为Ap。在某些时候,您需要一个基本情况,可能类似于parse(A, A) :- atom(A).,它表示原子将解析为自身(无需进一步解析)。所以parse(a, A)会导致A = a。
标签: prolog