Comment utiliser et à l'intérieur de Findall / 3 Meta Predicat
-
29-10-2019 - |
Question
Je voudrais écrire ceci:
paths( Result ) :-
findall( B, f(B) , Result ).
f( B ) :-
f1( B ),
f2( B ).
en une seule ligne. Donc fondamentalement quelque chose comme:
paths( Result ) :-
findall( B, f1(B) AND f2(B), Result ).
Je ne sais pas comment exprimer 'et' dans une déclaration de but. Est-ce possible?
La solution
Mettez simplement des parenthèses autour de lui:
paths(Result) :-
findall(B, (f1(B),f2(B)), Result).
Ajout:Les objectifs ne sont que des conjonctions (et des disjonctions) des sous-objectifs. Vous pouvez les construire à un moment donné, puis les transmettre jusqu'à ce qu'ils soient appelés. Ceci est utile si l'objectif doit être construit dynamiquement:
Goal = (f1(X), (f2(X) ; f3(X))),
findall(X, Goal, Result),
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow