如何接受谓词参数的两种配置之一

时间:2019-04-06 22:17:02

标签: prolog

说我有两个变量A和B,以及两个谓词firstPred()和secondPred()

我正在尝试表达以下内容:

(firstPred(A) && secondPred(B)) || (firstPred(B) && secondPred(A))

我目前有

firstPred(A),
secondPred(B).

但这仅涵盖第一种情况。如何添加对第二个的支持?

1 个答案:

答案 0 :(得分:1)

在Prolog中对谓词的引用使用符号Name/Arity,其中Arity是自变量的数量。因此,不要写firstPred()secondPred(),而要写firstPred/1secondPred/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).

请注意,此解决方案假定条件中的析取不是互斥析取。是这样吗?