Verwendung und innerhalb von findall / 3 Meta-Prädikat
-
29-10-2019 - |
Frage
Ich möchte Folgendes schreiben:
paths( Result ) :-
findall( B, f(B) , Result ).
f( B ) :-
f1( B ),
f2( B ).
in nur einer Zeile. Also im Grunde so etwas wie:
paths( Result ) :-
findall( B, f1(B) AND f2(B), Result ).
Ich weiß nicht, wie ich 'UND' in einer Zielaussage ausdrücken soll. Ist das überhaupt möglich?
Lösung
Setzen Sie einfach Klammern darum:
paths(Result) :-
findall(B, (f1(B),f2(B)), Result).
Ergänzung:
Ziele sind nur Konjunktionen (und Disjunktionen) von Unterzielen.Sie können sie irgendwann erstellen und dann weitergeben, bis sie aufgerufen werden.Dies ist nützlich, wenn das Ziel dynamisch erstellt werden muss:
Goal = (f1(X), (f2(X) ; f3(X))),
findall(X, Goal, Result),
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow