Gibt es eine Möglichkeit, alle Lösungen anzuzeigen und/oder zu finden, wie viele es in SICSTus Prolog gibt? Zum Beispiel könnte der folgende Code verwendet werden, um das Karteneinfärbungsproblem zu lösen.SICStus Prolog: Finden Sie alle Lösungen
:- use_module(library(clpfd)).
solve_AUSTRALIA(WA,NT,Q,SA,NSW,V):-
domain([WA,NT,Q,SA,NSW,V], 1, 4),%colours represented by integers from 1 to 4
WA #\= NT,
WA #\= SA,
NT #\= SA,
NT #\= Q,
SA #\= Q,
SA #\= NSW,
SA #\= V,
Q #\= NSW,
NSW #\= V,
labeling([],[WA,NT,Q,SA,NSW,V]).
Im Moment Ich schreibe ;
jedes Mal, weitere Lösungen zu sehen, bis Prolog nicht sagt. Gibt es eine Möglichkeit, Prolog zu sagen, um alle Lösungen auf einmal zu zeigen, oder besser, eine Art, wie ich dort finden kann. Wie Prolog mir sagt gibt es fünf Lösungen für das Problem.
Sie können versuchen, 'zu verwenden findall/3',' findall/4 ',' bagof/3' oder 'SETOF/3'. Sie sind sich ähnlich. Beispielsweise möchten Sie Ihr Lösungsprädikat in 'findall (+ Templage,: Solution, -Bag) 'und den ursprünglichen Datensatz als' Template' und die kollektive Lösung als '-Bag' setzen. –
Ein genereller Tipp für clpfd in SICStus: Sagen Sie 'assert (clpfd: full_answer)' an der Toplevel, um die vollständige Antwort einschließlich aller Einschränkungen zu erhalten! – false