Come usare e all'interno del meta predicato findall / 3
-
29-10-2019 - |
Domanda
Vorrei scrivere questo:
paths( Result ) :-
findall( B, f(B) , Result ).
f( B ) :-
f1( B ),
f2( B ).
in una sola riga. Quindi fondamentalmente qualcosa come:
paths( Result ) :-
findall( B, f1(B) AND f2(B), Result ).
Non so come esprimere "AND" in una dichiarazione di obiettivo. È possibile?
Soluzione
Metti solo parentesi attorno ad esso:
paths(Result) :-
findall(B, (f1(B),f2(B)), Result).
Aggiunta: Gli obiettivi sono solo congiunzioni (e disgiunzioni) di sotto-obiettivi.Puoi costruirli a un certo punto e poi passarli in giro finché non vengono chiamati.Ciò è utile se l'obiettivo deve essere costruito dinamicamente:
Goal = (f1(X), (f2(X) ; f3(X))),
findall(X, Goal, Result),
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow