[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Doker

6/30/2007 4:07:00 PM

Czesc.

Staram sie zrobic predykat do zamiany wartosci w tablicy. Poniewaz mam z
tym problemy zaczalem od podstaw czyli gdy nalezy zastapic pierwszy wyraz.

zastap([T|H],1,[TN,HN],Sym) :- TN is Sym, HN is H.

W SWI-PROLOG Wpisuje np. tak:
? - zastap([1,2,3],1,X,b).
czy tak:
? - zastap([1,2,3],1,X,"b").
I niestety kaszana.

Przy okazji drugie pytanie. Znacie dobre zrodlo wiedzy do Prologa?

Pozdrawiam,
Jarek
8 Answers

Zbyszek Malec

6/30/2007 5:03:00 PM

0

Dnia Sat, 30 Jun 2007 18:07:25 +0200, Doker napisa3(a):

> zastap([T|H],1,[TN,HN],Sym) :- TN is Sym, HN is H.

zastap([T|H], 1, [Sym|H], Sym).

Przy okazji, [] oznacza liste, nie tablice.
Co to jest T? Tail? Je?li tak, to powinien bya reszt? listy, a nie
pierwszym elementem. Co to jest H? Head? Je?li tak, to powinien bya
pierwszym elementem a nie koncem reszt? listy.


--
Zbyszek Malec Ustronie 104
jid: zbyszanna@jid.pl

Doker

6/30/2007 7:16:00 PM

0

Zbyszek Malec napisa3(a):
> Dnia Sat, 30 Jun 2007 18:07:25 +0200, Doker napisa3(a):
>
>> zastap([T|H],1,[TN,HN],Sym) :- TN is Sym, HN is H.
>
> zastap([T|H], 1, [Sym|H], Sym).
>
> Przy okazji, [] oznacza liste, nie tablice.
> Co to jest T? Tail? Je?li tak, to powinien bya reszt? listy, a nie
> pierwszym elementem. Co to jest H? Head? Je?li tak, to powinien bya
> pierwszym elementem a nie koncem reszt? listy.
Na okraglo zapominam o tych zdolnosciach Prologa i komplikuje sobie zycie.
Dzieki wielkie.

Doker

6/30/2007 7:31:00 PM

0

Chcia3em sie Ciebie jeszcze zapytaa...
przy za3o?eniu:
zastap([_|T],1,[Sym|T],Sym).

dlaczego dzia3a:
zastap([H|T],N,[H|Tn],Sym) :- Nm is N - 1,zastap(T,Nm,Tn,Sym).

a nie dzia3a:
zastap([H|T],N,[H|Tn],Sym) :- Nm is N - 1,zastap(T,Nm,X,Sym), Tn is X.

Pozdrawiam,
Jarek

Zbyszek Malec

6/30/2007 8:33:00 PM

0

Dnia Sat, 30 Jun 2007 21:31:23 +0200, Doker napisa3(a):

> dlaczego dzia3a:
> zastap([H|T],N,[H|Tn],Sym) :- Nm is N - 1,zastap(T,Nm,Tn,Sym).
>
> a nie dzia3a:
> zastap([H|T],N,[H|Tn],Sym) :- Nm is N - 1,zastap(T,Nm,X,Sym), Tn is X.

Generalnie "is" nie jest czyst? relacj?, wymaga ?eby prawy argument by3 ju?
ukonkretniony (o ile dobrze pamietam).

--
Zbyszek Malec Ustronie 416
jid: zbyszanna@jid.pl

Wit Jakuczun

7/1/2007 9:19:00 AM

0

Dnia Sat, 30 Jun 2007 19:03:17 +0200
Zbyszek Malec <zbyszanna@tlen.pl> napisal(a):

> Dnia Sat, 30 Jun 2007 18:07:25 +0200, Doker napisal(a):
>
> > zastap([T|H],1,[TN,HN],Sym) :- TN is Sym, HN is H.
>
> zastap([T|H], 1, [Sym|H], Sym).
>
Lepiej

zastap([_|H], 1, [Sym|H], Sym).

Zdrowia
--
[ Wit Jakuczun <W.Jakuczun [at] wlogsolutions.com> ]
[ WLOG Solutions http://www.wlogsol... ]

Wit Jakuczun

7/1/2007 9:25:00 AM

0

Dnia Sat, 30 Jun 2007 22:33:07 +0200
Zbyszek Malec <zbyszanna@tlen.pl> napisal(a):

> Generalnie "is" nie jest czysta relacja, wymaga zeby prawy argument byl juz
> ukonkretniony (o ile dobrze pamietam).
>
Dobrze pamietasz.

Z dokumentacji mojego prologa:
?Result is +Expression
Evaluates the arithmetic expression Expression and unifies the
resulting value with Result.

Zdrowia
--
[ Wit Jakuczun <W.Jakuczun [at] wlogsolutions.com> ]
[ WLOG Solutions http://www.wlogsol... ]

Wit Jakuczun

7/1/2007 9:29:00 AM

0

Dnia Sat, 30 Jun 2007 18:07:25 +0200
Doker <doker0@wp.pl> napisal(a):


> Przy okazji drugie pytanie. Znacie dobre zrodlo wiedzy do Prologa?
>
1) google
2) dokumentacja Twojego prologa
3) http://www.amzi.com/AdventureInProlog/ad...
4) http://www.prologonlinereference.or...
5) http://www.freeprogrammingresources.com/prolo...


Zdrowia
--
[ Wit Jakuczun <W.Jakuczun [at] wlogsolutions.com> ]
[ WLOG Solutions http://www.wlogsol... ]

Doker

7/1/2007 1:32:00 PM

0

Dzieki za pomoc:

Oto efekt mojej pracy:
Maszyna Turinga :) i program sprawdzajacy czy slowo jest palindromem.

przykladowe u?ycie:
t([o,b,a,b,b,a,b,o],2,q0,X).

kod:

pr(o,q0,q6,o,0).
pr(o,q1,q3,o,-1).
pr(o,q2,q4,o,-1).
pr(o,q3,q6,o,0).
pr(o,q4,q6,o,0).
pr(o,q5,q0,o,1).
pr(a,q0,q1,o,1).
pr(a,q1,q1,a,1).
pr(a,q2,q2,a,1).
pr(a,q3,q5,o,-1).
pr(a,q4,q7,o,0).
pr(a,q5,q5,a,-1).
pr(b,q0,q2,o,1).
pr(b,q1,q1,b,1).
pr(b,q2,q2,b,1).
pr(b,q3,q7,o,0).
pr(b,q4,q5,o,-1).
pr(b,q5,q5,b,-1).
pr(koncowe,[q6,q7]).

zastap([_|T],1,[Sym|T],Sym).
zastap([H|T],N,[H|Tn],Sym) :- Nm is N - 1, zastap(T,Nm,Tn,Sym).
ustaw(X,X).
t([H|T],Poz,Q,Odp) :- nth1(Poz,[H|T],Sym),
pr(koncowe,SKonc),
( memberchk(Q,SKonc) -> ustaw(Q,Odp);
( pr(Sym,Q,NQ,NSym,DeltaPoz),
NPoz is Poz + DeltaPoz,
print([Poz,NPoz,Q,NQ,Sym]),print([H|T]),
zastap([H|T],Poz,[Hn|Tn],NSym), writeln([Hn|Tn]),
t([Hn|Tn],NPoz,NQ,Odp)) ).