我正在尝试编写一个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(_,_)).
任何人都可以打击?
答案 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
的参数类型为a
和b
,并且必须存在一些值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.