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?

È stato utile?

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