8063591493

8063591493



}


}


Zapisanie do PROLOGU: set_intersec([], []).

//W Prologu nie można zwracać true ani false, ale procedura może się powieść, albo nie. I to wykorzystujemy:

// member zakończyło się powodzeniem

set_intersec([X|R], Set2, [X|Intl]) :- member(X, Set2), set_intersec(R, Set2, Intl).

// member zakończyło się niepowodzeniem

set_intersec([X|R], Set2, Intl) :- not member(X, Set2), setintersec(R.Set2.lntl). (?!)

W sumie negację można sobie samemu napisać, nie patrząc na procedury wbudowane.

Jeżeli wywołujemy setjntersec po prawej stronie jakiejś reguły, to wiadomo, że trzecia reguła nigdy się nie wykona przy pierwszym podejściu. Przy nawrocie, interpreter wybierze pozostałą możliwość i przy nawrocie wejdzie w trzecią możliwość.

Jeżeli wyrzucimy z prawej strony 3 reguły "not member...", otrzymamy niedeterminizm niezamierzony, robi się błąd. Konieczny jest pewien mechanizm siłowy, który umożliwia pisanie czegoś w stylu 'else'. Warunek już raz został spełniony i w drugą gałąź nie trzeba wchodzić.

Taki mechanizm istnieje.

Wstawianie do listy i sortowanie:

insert(X, [Y|Rest], [Y|Restl]) :- X>Y, insert(X, Rest, Restl). // Przesuwanie X po liście do coraz wyższych elementów, aż w końcu znalezienie odpowiedniego miejsca i...

insert(X, [Y|Rest], [X,Y|Rest]) :- X =< Y. //... wstawienie

Żeby nie sprawdzać dla drugiej reguły warunku, który już raz został sprawdzony, przy możliwości nawrotu w wywołaniu po prawej stronie, stosujemy ODCIĘCIE. Oznaczone przez "!".

insert(X, [Y|Rest], [Y|Restl]) :-X>Y, !, insert (X, Rest, Restl). insert(X, List, [X|List]).

Odcięcie:

Zinterpretowanie odcięcia powoduje wymazanie z pamięci interpretera wszystkich punktów, które wystąpiły przed odcięciem w kontekście przetwarzania procedury.

P' :-Q, !, R.

P" :- S, T.

PO x


P"


P'

Q1,R1

x

Definicja operacji z negacją z odcięciem:

not_member(X, L) :- member(X,L). //jeżeli member zakończy się nie powodzeniem



Wyszukiwarka

Podobne podstrony:
Wstyd i przemo0133 264 Wstyd i przemoc się stało i dlaczego do tego doszło, potrzebę, której nie moż
zdolność prawną od chwili powstania do momentu likwidacji. Zdolności prawnej nie można się zrzec, ni
CCI20101218024 25 Ci({garki ławowe stosowane są do ciągnienia prętów i rur, których nie można nawij
LastScan25 (3) 25 Ciągarki ławowe stosowane są do ciągnienia prętów i rur, których nie można nawijać
czujniki PSEN Przy dążeniu do wysokiej efektywności instalacji przemysłowych nie można zaniedbywać
170 TARŁOWIE. przystosować do wspomnianego statutu swego poprzednika. Nie można z kapitułą rzucać oc
przykĹ‚ad rzutowania Rys. 3.12. Konstrukcje pomocnicze do wyznaczania położenia punktów, których nie
historia dyplomacji (109) pretekstu do wojny — odparował zdecydowanie, że nie można tu oddzielić win
Magazyn6 1001 906 MERKANTYLIZM doszli do przekonania, że stosunków ekonomicznych nie można regulo
choroszyB7 427 Docieranie płaszczyzn stosuje się bądź do obróbki powierzchni utwardzonych, których n
DSCN2616 ■ Typ wyliczeniowy jest podobny do typów char oraz int i Nie można jednakże na jego wartośc
Autorskie prawa osobiste są tak ściśle związane z osobą twórcy, ze nie można się ich ani zrzec,
e31a8c0cabc687f510fa644d89902b340aae6db5 Nie można dodać życiu więcej dni Ale można dodać dniom więc
IMG306 ...Et ipse Notus in fratres animi paterni.1 Nie można tu porównać ani też stawiać w tym samym
18200 P3111108 40 Dociekania filozoficzne 50. Co znaczy więc powiedzenie o elementach, że nie można

więcej podobnych podstron