Ich bin mit SWI-Prolog arbeiten, um die Liste aller verschiedenen ganzen Zahlen zwischen 5 und 10 zu erhalten clpfd erzeugen:clpfd - erzeugen die Liste aller ganzen Zahlen zwischen 5 und 10
q1(Answer) :-
length(Xs, Answer),
Xs ins 0..20,
chain(Xs, #<),
maplist(q1constraints, Xs).
q1constraints(X) :-
X #>= 5,
X #=< 10.
Art der Arbeiten, aber erzeugt eine Lösung für jede der Längen 0, 1, ... 6 und legt dann eine Lösung von Länge 7 sucht:
?- q1(Answer).
Answer = 0 ;
Answer = 1 ;
Answer = 2 ;
Answer = 3 ;
Answer = 4 ;
Answer = 5 ;
Answer = 6 ;
<hangs>
gibt es ein guter Weg, um die Liste der alle ganzen Zahlen zu erzeugen, die die befriedigen gewünschte Einschränkungen?
Eine Liste? Oder sie durch Backtracking generieren? Und was meinst du mit "eindeutig", genau? Warum die 'Länge/2'? Warum die "ins 0..20"? Ich habe das Gefühl, dass du nicht erklärst, was du zu tun versuchst. –
Ich möchte aus Einschränkungen die Liste [5, 6, 7, 8, 9, 10] generieren und dann zählen, wie viele Elemente darin enthalten sind. Die Constraints können reicher sein, zum Beispiel möchte ich eine Form von "even" Constraint hinzufügen, möglicherweise "X mod 2 # = 0", was [6, 8, 10] erzeugen sollte. Der Listenoperator kann reicher sein, zum Beispiel möchte ich "sum" anstelle von "count" sagen. –
PS. Deutlich, da mir Listen wie [5, 5, 5, 5, 5, 6] egal sind. –