1

如何在代码中执行查询?

例如:

person(abe,instructor).  
person(bob,student).  
person(cindy,student).  
person(david,student).  
person(abe,student).  

% Like this, but this does not work  
% :- person(X,Y).  

加载程序后,我可以运行以下查询:person(X,Y)。

如何将此查询作为程序本身的一部分运行,以便程序加载后,它将运行查询并输出:

X = abe,  
Y = instructor ;  
X = bob,  
Y = student ;  
X = cindy,  
Y = student ;  
X = david,  
Y = student ;  
X = abe,  
Y = student.  
4

1 回答 1

1

你可以只创建一个新的谓词......这里有两种不同的方式。第一个找到所有人(X,Y),将​​他们放入一个列表 AllPeople,然后将其写出来。

第二个是“失败驱动循环”,它执行第一个匹配,将其写出,然后告诉 prolog 再试一次,即“失败”,它一直持续到没有更多匹配项,然后匹配同名的第二个谓词,以确保谓词最终返回 true。

showpeople1 :-
    findall(X/Y, person(X,Y), AllPeople),
    write(AllPeople).

showpeople2 :-
    person(X, Y),
    write(X), write(','), write(Y), nl,
    fail.

showpeople2 :- true.



?- showpeople1.
[abe/instructor,bob/student,cindy/student,david/student,abe/student]
true.

?- showpeople2.
abe,instructor
bob,student
cindy,student
david,student
abe,student
true.
于 2012-04-19T19:41:56.993 回答