[ Pobierz całość w formacie PDF ]
.i jego działanie:6 ?- permutacja([6,3,4,7,9],X).X = [6, 3, 4, 7, 9] ;X = [6, 3, 4, 9, 7] ;X = [6, 3, 7, 4, 9] ;X = [6, 3, 7, 9, 4] ;X = [6, 3, 9, 4, 7] ;X = [6, 3, 9, 7, 4] ;X = [6, 4, 3, 7, 9] ;X = [6, 4, 3, 9, 7] ;X = [6, 4, 7, 3, 9] ;X = [6, 4, 7, 9, 3] ;X = [6, 4, 9, 3, 7] ;X = [6, 4, 9, 7, 3] ;X = [6, 7, 3, 4, 9] ;X = [6, 7, 3, 9, 4] ;X = [6, 7, 4, 3, 9] ;X = [6, 7, 4, 9, 3] ;X = [6, 7, 9, 3, 4] ;X = [6, 7, 9, 4, 3] ;Programowanie w logice.Prolog �2007 2009 by P.Fulmański (ostatnia modyfikacja: 18 maja 2009) 50 ROZDZIAA 5.ODCICIEX = [6, 9, 3, 4, 7] ;X = [6, 9, 3, 7, 4] ;X = [6, 9, 4, 3, 7] ;X = [6, 9, 4, 7, 3] ;X = [6, 9, 7, 3, 4] ;X = [6, 9, 7, 4, 3] ;X = [3, 6, 4, 7, 9] ;X = [3, 6, 4, 9, 7] ;X = [3, 6, 7, 4, 9] ;X = [3, 6, 7, 9, 4] ;X = [3, 6, 9, 4, 7] ;X = [3, 6, 9, 7, 4]Tak jak się tego spodziewaliśmy - najpierw poszukiwane są odpowiedzi dla pierwszychustalonych przez program argumentów, czyli znjdowana jest permutacja[6,3,4,7,9],następnie cyfra 7 jest zastępowana kolejną możliwą (9) i wyznaczana jest ostatnia cyfraciągu (7), itd.Pytanie 5.2.Na ile istotna dla Prologu jest kolejność faktów i reguł? Podajprzykład.Jeśli program działa deterministycznie i nie ma w nim odcięć, to kolejenośćfaktów i reguł ma wpływ jedynie na kolejność znajdowania (a zatem i wypisywania naekranie) odpowiedzi.Dokładniej jest o tym mowa w poprzednim pytaniu.Jeśli naszezapytanie nie jest deterministyczne tzn.może zostać wygenerowany nieskończony ciągodpowiedzi, to kolejność predykatów w regułach i faktów może być istotna.Np:a(X,Y) :- c(X), b(Y).c(0).c(X) :- c(Y), X is Y-1.b(0).b(X) :- b(Y), X is Y+1.zadziała inaczej niż:a(X,Y) :- b(X), c(Y).c(0).c(X) :- c(Y), X is Y-1.b(0).b(X) :- b(Y), X is Y+1.o czym przekonują nas wyniki, odpowiednio?- a(C,D).C = 0,D = 0 ;C = 0,D = 1 ;C = 0,D = 2 ;Programowanie w logice.Prolog �2007 2009 by P.Fulmański (ostatnia modyfikacja: 18 maja 2009) 5.3.PYTANIA I ODPOWIEDZI.51oraz?- a(C,D).C = 0,D = 0 ;C = 0,D = -1 ;C = 0,D = -2 ;Formalnie pełne zbiory odpowiedzi na powyższe zapytanie dla obu reguł są identyczne,lecz biorąc pod uwagę fakt, że dysponujemy skończonym czasem na znalezienie rozwiązań,wygenerowane zbiory nie będą się pokrywać poza punktemC=0,D=0.Pytanie 5.3.Co nazywamy  odcieciem ? Zilustruj działanie tego mechanizmuna przykaładzie.Operator odcięcia (!) pojawiający się w regule spełnia rolę trwałegopodstawienia stałych w miejsce zmiennych poprzedzających ten operator w obrębie reguły.Jego działanie rozciąga się jednak na wszystkie kolejne pojawienia się tych zmienych wprogramie.Można powiedzieć, że!przesuwa początek reguły do miejsca pojawienia sięw niej i redukuje ilość zmiennych w dalszym kodzie programu.Ponieważ działanie tegooperatora zostało już poparte przykładami na wykładzie proponuję,  zbadać jak zachowasię następujący programeksperyment(Y) :- !.spójrzmy:?- eksperyment(X).Yes?- eksperyment(a).Yes?- eksperyment(1).Yes?- eksperyment(*).Yes?- eksperyment(_).YesOkazuje się zatem, że powyższy zapis oznacza po prostu zdanie prawdziwe a zmiennaXnie ma określonego typu.Programowanie w logice.Prolog �2007 2009 by P.Fulmański (ostatnia modyfikacja: 18 maja 2009) 52 ROZDZIAA 5.ODCICIEProgramowanie w logice.Prolog �2007 2009 by P.Fulmański (ostatnia modyfikacja: 18 maja 2009) Rozdział 6Wejście i wyjście.Operatory6.1 Czytanie i pisanie termów6.1.1 Czytanie termówNajprostszym sposobem pobierania danych od użytkownika jest odczytywanie informacjiwprowadzonych za pomocą urządzenia standardowego wejścia jakim zwykle jest klawia-tura.Zadanie to realizuje predykatread.Niech dany będzie następujący programa(1,b).a(1,c).a(2,d).a(2,e).e(X) :- read(Y),a(Y,X).Efektem jego działania jest?- e(X).|: [1.][ENTER]X = b ;X = c ;NoZauważmy, że" Wprowadzony term musi kończyć się znakiem kropki (.)." Predykatreadmożna uzgodnić tylko raz.Jak widać w powyższym przykładzie,Prolog podczas nawracania nie pytał już o kolejne liczby.W tym przypadku na-wracanie to można wymusić predykatemrepeatmodyfikując regułę do postacie(X) :- repeat,read(Y),a(Y,X).w efekcie czego otrzymujemy?- e(X).|: [1.][ENTER]Programowanie w logice.Prolog �2007 2009 by P.Fulmański (ostatnia modyfikacja: 18 maja 2009) 54 ROZDZIAA 6.WEJZCIE I WYJZCIE.OPERATORYX = b ;X = c ;|: [2.][ENTER]X = d ;X = e ;.Ogólnie mówiąc predykatrepeat/0kończy się zawsze sukcesem przy pierwszymjego wywołaniu a także we wszystkich wywołaniach będących wynikiem nawra-cania.Predykaty występujące zarepeatsą wywoływane dopóki wszystkie niezakończą się sukcesem.Dlatego najprostszym przykładem  pętli nieskończonejw Prologu jest schematrepeat,., fail.Poniżej przedstawiamy inny prostyprogram wykorzystujący predykatrepeatcommand_loop:-write( repeat example ),nl,repeat,write( Enter command (end to exit):  ),read(X),write(X), nl,X = end.Efektem działania programu jest?- command_loop.Enter command (end to exit): [ala.][ENTER]alaEnter command (end to exit): [ma.][ENTER]maEnter command (end to exit): [kota.][ENTER]kotaEnter command (end to exit): [end [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • gieldaklubu.keep.pl
  •