cokolwiek, z punktu widzenia do pominięcia. nie przenosi wartości, nie interesuje nas.
MEMBER(X,L):- L=[Y|R], X\=Y, MEMBER(X,R). // czyli X nie jest pierwszym elementem, ale należy do reszty listy. Po przepisaniu:
MEMBER(X,[Y|R]) X\=Y, MEMBER(X,R).
Ostatecznie nasza procedura member wygląda następująco:
MEMBER(X,[X|J).
MEMBER(X,[Y|R]) :-X\=Y, MEMBER(X,R).
Na materiałach wykładowych jest rozrysowane drzewo przeszukiwania przestrzeni celu dla przykładu. Własność nierówności jest interpretowana jako cel tak, jakby była uzgodniona z faktem. Jest to związane z implementacją wewnętrzną (różne wskaźniki?). Zastępowane jest przez cel pusty.
Co się dzieje, jeżeli cel nie może być uzgodniony:
W kontekście pytania użytkownika po prostu nie uzyskujemy nic w odpowiedzi, odpowiedź negatywna, np. na pytanie czy jest MEMBER, odpowiedź NO.
W kontekście przetwarzania w programie, jeżeli wywołanie MEMBER :
P(L1, L2):- Q(L1, X), MEMBER(X,L2).
X jest uzgadniany najpierw przez Q. Jeżeli MEMBER zakończy się niepowodzeniem, następuje nawrót do ostatniego punktu wyboru X, czyli sprawdzenie, czy Q może w inny sposób uzgodnić X. Ogólnie, w przypadku braku możliwości ustalenia celu, następuje powrót do najbliższego punktu przetwarzania, gdzie mogła zostać podjęta inna decyzja, czyli inne uzgodnienie zmiennych.
Procedury deterministyczne w kontekście celu:
Procedura jest deterministyczna w kontekście rozpatrywanego celu, jeżeli dla tego celu początkowego w każdym kroku istnieje możliwość wybrania co najwyżej jednego celu. Procedury CONC i MEMBER są deterministyczne w kontekście celu w zastosowaniach do tej pory rozpatrywanych.
Niedeterministyczne zastosowania CONC:
?_conc(LA, LB, [a,b,c])
Gdzie zmienne LA i LB nie są związane. Wtedy rozwiązaniem są wszystkie pary LA, LB takie, że lista [a,b,c] jest ich konkatenacją. W takim użyciu, pytamy o wszystkie możliwe podziały listy.
Prawie w każdym kroku (z wyjątkiem liścia związanego z drugim celem) może być uzgodniony każdy z dwóch celów: conc([], L2, L2).
conc([X|Ll], L2, [X,RN]) :- conc(Rl, L2, RN).
Na slajdach z wykładu jest zademonstrowane drzewo przeszukiwania przestrzeni celów.
Jeżeli cel początkowy jest określony przez użytkownika, wtedy otrzyma wartości zmiennych i odpowiedź YES.
Jeżeli kontekstem jest przebieg programu, nastąpi nawrót do najbliższego punktu przetwarzania, w którym możliwe jest podjęcie innej decyzji, inne uzgodnienie celu.