Sie können ‚aufrufen‘ alternative Bindungen auf Y
auf diese Weise:
...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103).
Beachten Sie die Klammern erforderlich sind, um die korrekte Ausführung Steuerfluss zu halten. Der ;
/2 ist der allgemeine Operator or
. Für Ihre eingeschränkte Nutzung könnten Sie auch Wahl der mehr idiomatische
...registered(X, Y), member(Y, [ct101,ct102,ct103]).
dass auf Rückzieher Y jedes Mitglied der Liste bindet.
bearbeiten Ich verstand mit einer Verzögerung Ihre letzte Anforderung. Wenn Sie möchten, dass Y Spiel alle 3 Werte des oder unangemessen ist, verwenden Sie stattdessen
...registered(X, ct101), registered(X, ct102), registered(X, ct103).
oder kompaktere
...findall(Y, registered(X, Y), L), sort(L, [ct101,ct102,ct103]).
findall/3 baut die Liste in der gleichen Reihenfolge, die registriert/2 gelingt. Dann verwende ich sort, um die Übereinstimmung zu gewährleisten.
...setof(Y, registered(X, Y), [ct101,ct102,ct103]).
SETOF/3 sortiert auch die Ergebnisliste
Dank, half dies eine Tonne. Ich war mir nicht sicher, wie ich das anstellen sollte, aber ich werde mich über Bindings und Backtracking informieren. Geschätzt! – Eogcloud