[ Pobierz całość w formacie PDF ]
.zastap([Y1|T1],Y1,Y2,[Y2|T2]) :- zastap(T1,Y1,Y2,T2).zastap([H|T1],Y1,Y2,[H|T2]) :- \+ (H =Y1), zastap(T1,Y1,Y2,T2).Programowanie w logice.Prolog ©2007 2009 by P.FulmaÅ„ski (ostatnia modyfikacja: 18 maja 2009) 138 ROZDZIAA 14.ROZWIZANIA WICZEC14.5 wiczenie 514.5.1 Odpowiedzi do zadania 13.5.1ostatni(X,[X]).ostatni(X,[_|Y]) :- ostatni(X,Y).14.5.2 Odpowiedzi do zadania 13.5.2sasiad(X,Y,[X,Y|_]).sasiad(X,Y,[_|Z]) :- sasiad(X,Y,Z).14.5.3 Odpowiedzi do zadania 13.5.3usunAll(_,[],[]).usunAll(X,[X|T],Z) :- !, usunAll(X,T,Z).usunAll(X,[Y|T1],[Y|T2]) :- usunAll(X,T1,T2).14.5.4 Odpowiedzi do zadania 13.5.4%elementSzukany,NowyElement,Lista,Wynikzamien(_,_,[],[]).zamien(X,Y,[X|T1],[Y|T2]) :- !, zamien(X,Y,T1,T2).zamien(X,Y,[Z|T1],[Z|T2]) :- !, zamien(X,Y,T1,T2).14.5.5 Odpowiedzi do zadania 13.5.5%zmienna A pelni role akumulatora, gromadzacego wszystkie%pojedyncze wystapienia elementowusunPowt(L,W) :- usunPowtHelp(L,[],W).usunPowtHelp([],A,A).usunPowtHelp([H|T],A,L) :- nalezy(H,A), !, usunPowtHelp(T,A,L).usunPowtHelp([H|T],A,L) :- usunPowtHelp(T,[H|A],L).Programowanie w logice.Prolog ©2007 2009 by P.FulmaÅ„ski (ostatnia modyfikacja: 18 maja 2009) 14.6.WICZENIE 6 13914.6 wiczenie 614.6.1 Odpowiedzi do zadania 13.6.1Kod programu%maszyna turinga - definicja funkcji przejscia wg.formatu%(stan,odczytanySymbol,nowyStan,symbolDoZapisania,kierunek)d(s,a,1,b,r).d(d,b,2,a,r).d(1,a,1,b,l).d(1,b,k,a,r).d(2,a,k,b,r).d(2,b,2,a,l).%predykaty pomocniczeodwroc([],[]).odwroc([X|Xs],Zs) :- odwroc(Xs,Ys), polacz(Ys,[X],Zs).polacz([],Lista,Lista).polacz([H|T],Lista,[H|Res]) :- polacz(T,Lista,Res).%koniec predykatow pomocniczych%poruszanie sie po tasmie w prawo%gdy ,,skonczyla  sie tasma - dodaje elementy pustetape([],1,[],[.],[]).tape([],Pos,[.|L],H,R) :- Pos>1,PosTmp is Pos -1,tape([],PosTmp,L,H,R).%gdy tasma sie nie ,,skonczyla  - wykorzystuje elementy, ktore satape([HT|TT],1,[],HT,TT).tape([HT|TT],Pos,[HT|L],H,R) :- Pos>1,PosTmp is Pos -1,tape(TT,PosTmp,L,H,R).%poruszanie sie po tasmie w lewo%odwracam tasme i stosuje reguly dla poruszania sie w prawo a potem odwracam%i zamieniam wynikitape(List,-1,RRev,H,L) :- odwroc(List,RevList),tape(RevList,1,L,H,R),odwroc(R,RRev).tape(List,Pos,RRev,H,LRev) :- Pos T ),nl.calc(Expr):- \+Expr,write( -> F ),nl.Programowanie w logice.Prolog ©2007 2009 by P.FulmaÅ„ski (ostatnia modyfikacja: 18 maja 2009) 14.6.WICZENIE 6 141Wersja dziaÅ‚ajaca dla dowolnej iloÅ›ci zmiennych, które muszÄ… być przekazane w liÅ›ciejako pierwszy argument wywoÅ‚ania, np.sprawdz([A,B,C],a(A,o(n(B),C))).Program.v(true).v(fail).a(A,B):-A,B.o(A,B):-(A;B),!.n(A):- \+A.sprawdz([],_).sprawdz([A|B],Expr) :- v(A),write(  ),write(A), sprawdz(B,Expr),calc(Expr),fail.calc(Expr):- Expr,write( -> T ),nl.calc(Expr):- \+Expr,write( -> F ),nl.Niestety wyniki nie sÄ… czytelne?- sprawdz([A,B,C],a(A,o(n(B),C))).true true true -> Tfail -> Ffail true -> Tfail -> Tfail true true -> Ffail -> Ffail true -> Ffail -> FNoAby poprawić czytelność należy napisać program tak, aby powyższy wynik zostaÅ‚ wy-Å›wietlony w postaci?- sprawdz([A,B,C],a(A,o(n(B),C))).true true true -> Tfail -> Ffail true -> Tfail -> Tfail true true -> Ffail -> Ffail true -> Ffail -> FNoProgramowanie w logice.Prolog ©2007 2009 by P.FulmaÅ„ski (ostatnia modyfikacja: 18 maja 2009) 142 ROZDZIAA 14.ROZWIZANIA WICZEC14.7 wiczenie 714.7.1 Odpowiedzi do zadania 13.7.1wielomian(X,X).wielomian(T,X) :- number(T).wielomian(T,X) :- atom(T).wielomian(W1+W2, X) :- wielomian(W1, X), wielomian(W2, X).wielomian(W1-W2, X) :- wielomian(W1, X), wielomian(W2, X).wielomian(W1*W2, X) :- wielomian(W1, X), wielomian(W2, X).wielomian(W1/W2, X) :- wielomian(W1, X), (number(W2); atom(W2)).wielomian(W^N, X) :- wielomian(W, X), integer(N), N>0.14.7.2 Odpowiedzi do zadania 13.7.2d(X,X,1) :- !.d(C,X,0) :- number(C); atom(C).d(U+V,X,A+B) :- d(U,X,A), d(V,X,B).d(U-V,X,A-B) :- d(U,X,A), d(V,X,B).d(C*U,X,C*A) :- (number(C);atom(C)),\+ C=X,d(U,X,A),!.%przypadek szczególnyd(U*V,X,A*V+U*B) :- d(U,X,A), d(V,X,B).d(pow(U,C),X,C*pow(U,NC)*W) :- number(C),NC is C - 1,d(U,X,W).r(W,W) :- (number(W);atom(W)),!.r(W,N) :- W =.[Oper,L,R],r(L,Xl),r(R,Xr),red(Oper,Xl,Xr,N).red(+,X,0,X).red(+,0,X,X).red(+,X,Y,Z) :- number(X),number(Y),Z is X+Y,!.red(+,X,Y,X+Y).red(-,X,0,X).red(-,0,X,X).red(-,X,Y,Z) :- number(X),number(Y),Z is X-Y,!.red(-,X,Y,X-Y).red(*,_,0,0).red(*,0,_,0).red(*,X,1,X).red(*,1,X,X).red(*,X,Y,X*Y).dr(W,X,Wynik) :- d(W,X,WW),r(WW,Wynik).Programowanie w logice.Prolog ©2007 2009 by P.FulmaÅ„ski (ostatnia modyfikacja: 18 maja 2009) 14.8.WICZENIE 8 14314.8 wiczenie 814.8.1 Odpowiedzi do zadania 13.8.114.8.2 Odpowiedzi do zadania 13.8.214.8.3 Odpowiedzi do zadania 13.8.3Programowanie w logice.Prolog ©2007 2009 by P.FulmaÅ„ski (ostatnia modyfikacja: 18 maja 2009) 144 ROZDZIAA 14.ROZWIZANIA WICZEC14.9 wiczenie 914.9.1 Odpowiedzi do zadania 13.9.1Programowanie w logice.Prolog ©2007 2009 by P.FulmaÅ„ski (ostatnia modyfikacja: 18 maja 2009) Bibliografia[1] I.Bratko, Prolog Programming for Artificial Intelligence, 3rd edition, Addison-Wesley Publishers, 2001.[2] W.F.Clocksin, C.S.Mellish, Prolog.Programowanie, Wydawnictwo HELION,Gliwice, 2003.[3] M.A.Covington, Efficient Prolog: a practical tutorial, Artificial Intelligence Re-view, 273-287, 5 (1991).[4] M.A.Covington, Research Report AI-1989-08 [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • blondiii.htw.pl
  •