我试着写一个小的Prolog谓词

时间:2015-11-29 08:12:04

标签: prolog

我正在尝试编写一个Prolog谓词。 假设我们有数据类型A和类型B. 我们希望为这两种类型获得所有可能的组合:

x=no y=(1,3)
x=no y=(3,4)
x=yes y=(1,3)
....

这就是我们的代码:

A(1,3).
A(3,4).
B(no).
B(yes).

C(X,Y):-
   ***************.

我们是否需要创建一个包含两种类型

的类型C.
like
C(B,A)?

或者我们可以在C ..中进行匹配。

C(X,Y):-
C(B(_),A(_,_)).

任何人都可以打击?

1 个答案:

答案 0 :(得分:1)

正如luker所说,Prolog中的谓词必须以小写字母和大写字母变量开头。 说,我想你想要这样的东西:

a(1,3).
a(3,4).
b(no).
b(yes).

c(a(X,Y), b(Z)):- a(X, Y), b(Z).

最后一行表示c的参数类型为ab,并且必须存在一些值X,Y,Z,以便它们满足a和b谓词。 Prolog将自动统一谓词的标题和正文中的变量。

通过这种方式,您可以查询所有值的组合:

?- c(X, Y).
X = a(1, 3),
Y = b(no) ;
X = a(1, 3),
Y = b(yes) ;
X = a(3, 4),
Y = b(no) ;
X = a(3, 4),
Y = b(yes).

或者您可以查询特定值:

?- c(a(1,3), b(yes)).
true.
?- c(a(1,5), b(yes)).
false.