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?

Était-ce utile?

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
scroll top