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

新しい述語を作成するだけです。ここでは2つの異なる方法があります。最初にすべてのperson(X、Y)を検索し、それらをAllPeopleのリストに入れてから、それを書き出します。

2番目は「失敗駆動ループ」であり、最初の一致を実行して書き出し、プロローグに再試行するように指示します。つまり、「失敗」は、一致するものがなくなるまで続き、同じ名前の2番目の述語と一致します。述語が最終的に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 に答える