2010-12-02 9 views
11

목록에서 일부 결과에서 얻은 결과를 넣는 방법을 알고 싶습니다 (결과가 나오고 False가 될 때까지 세미콜론을 누르십시오). . 나는 약간의 프롤로그 리스너에 foo(X,[1,2,3]).를 작성하는 경우 예를 들어프롤로그의 목록에 쿼리의 모든 결과 넣기

은의이 결과는 내가 일어날 다음과 같은 것을, 목록에있는 모든 결과를 얻을 싶습니다

X=[11]; 
X=[22]; 
False. 

라고 할 수 있습니다.

?-another_foo(X,[1,2,3]). 
X=[[11],[22]]. 

another_foo 어떻게 든 foo는 모든 결과와 목록을 만들 foo는 사용할 수 있습니다. 나는 어떻게해야할지 모르겠다.

답변

15

는 내장 된 술어 findall/3 사용

?-findall(X0, foo(X0, [1,2,3]), X). 
X = [[11], [22]]. 

를 사용자가 정의 할 수 있습니다 another_foo/2 :

another_foo(X, Input) :- 
    findall(X0, foo(X0, Input), X).