można „wywołać” alternatywne wiązania na Y
ten sposób:
...registered(X, Y), (Y=ct101; Y=ct102; Y=ct103).
Uwaga nawiasy są wymagane, aby utrzymać prawidłowy przepływ sterowania wykonaniem. ;
/2 to ogólny operator or
. Dla Państwa ograniczonego użytkowania mogłeś także wybór bardziej idiomatyczne
...registered(X, Y), member(Y, [ct101,ct102,ct103]).
że na backtracking wiąże Y do każdy członek listy.
edycja Zrozumiałem z opóźnieniem twoje ostatnie wymaganie. Jeśli chcesz, aby mecz Y wszystkie 3 Wartości te lub jest nieodpowiednie, użyj zamiast
...registered(X, ct101), registered(X, ct102), registered(X, ct103).
lub bardziej kompaktowy
...findall(Y, registered(X, Y), L), sort(L, [ct101,ct102,ct103]).
findall/3 build lista w tej samej kolejności, że zarejestrowany/2 kończy się sukcesem. Następnie używam sortowania, aby zapewnić dopasowanie.
...setof(Y, registered(X, Y), [ct101,ct102,ct103]).
setof/3 sortuje także na liście wyników
Dzięki, pomogło tonę. Nie wiedziałem, jak sobie z tym poradzić, ale mam zamiar przeczytać o wiązaniach i wycofywaniu. Doceniony! – Eogcloud