2010-12-02 9 views
11

Me gustaría saber cómo hacer un predicado que ponga todos los resultados obtenidos de alguna consulta (para obtener un resultado y presionar punto y coma hasta obtener False) en una lista .Poniendo todos los resultados de una consulta en una lista en Prolog

Por ejemplo si escribo foo(X,[1,2,3]). de algún oyente Prolog, digamos que el resultado es

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

me gustaría obtener todos los resultados en una lista, así que algo como lo siguiente que sucedería.

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

another_foo de alguna manera usaría foo para crear una lista con todos los resultados de foo. Simplemente no sé cómo.

Respuesta

15

utiliza el incorporado en el predicado findall/3:

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

puede definir su another_foo/2:

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