说我有两个变量A和B,以及两个谓词firstPred()和secondPred()
我正在尝试表达以下内容:
(firstPred(A) && secondPred(B)) || (firstPred(B) && secondPred(A))
我目前有
firstPred(A),
secondPred(B).
但这仅涵盖第一种情况。如何添加对第二个的支持?
答案 0 :(得分:1)
在Prolog中对谓词的引用使用符号Name/Arity
,其中Arity
是自变量的数量。因此,不要写firstPred()
和secondPred()
,而要写firstPred/1
和secondPred/1
。更好的是,遵循Prolog编码准则,在命名谓词时使用下划线代替CamelCase。
要回答您的问题,您需要定义一个谓词来检查您的状况。该谓词将有两个参数。您情况的直接翻译将是:
condition(A, B) :-
( first_predicate(A),
second_predicate(B)
; first_predicate(B),
second_predicate(A)
).
但这不是很好的样式,最好使用两个子句:
condition(A, B) :-
first_predicate(A),
second_predicate(B)
condition(A, B) :-
first_predicate(B),
second_predicate(A).
请注意,此解决方案假定条件中的析取不是互斥析取。是这样吗?