Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:prolog:prolog_lab:prolog_lab_metaprog [2016/04/04 23:35] msl [3 Temat: Definiowanie operatorów] |
pl:prolog:prolog_lab:prolog_lab_metaprog [2019/06/27 15:50] (aktualna) |
| |
Realizowane jest to przez predykat :- op(P, T, N), który definiuje N, jako operator typu T, o priorytecie P. | Realizowane jest to przez predykat :- op(P, T, N), który definiuje N, jako operator typu T, o priorytecie P. |
| Zobacz: |
| * http://www.swi-prolog.org/pldoc/man?predicate=op/3 |
| * http://www.learnprolognow.org/lpnpage.php?pagetype=html&pageid=lpn-htmlse40 |
| |
Zdefiniowane w standardzie ISO operatory to: | Zdefiniowane w standardzie ISO operatory to: |
| |
<code prolog> | <code prolog> |
:-(go,','(write('Hello '), write('World\n'))). | :- (go,','(write('Hello '), write('World\n'))). |
| |
:-(go). | :- (go). |
</code> | </code> |
| |
| |
Patrz również: | Patrz również: |
* [[http://gollem.science.uva.nl/SWI-Prolog/Manual/operators.html|podręcznik SWI]] | |
* [[http://cs.union.edu/~striegnk/learn-prolog-now/html/node84.html#subsec.l9.operators.def|Lean Prolog Now]] | * [[http://cs.union.edu/~striegnk/learn-prolog-now/html/node84.html#subsec.l9.operators.def|Lean Prolog Now]] |
| |
Co zwróci poniższe zapytanie? | Co zwróci poniższe zapytanie? |
<code prolog> | <code prolog> |
?- i(X,B). | ?- i(A,B). |
</code> | </code> |
Podpowiedź: zwróć uwagę na priorytety operatorów. | Podpowiedź: zwróć uwagę na priorytety operatorów. |
| |
?- listing(matka). | ?- listing(matka). |
?- Kto=kasia, call(matka(Kto,Kogo)), write(Kto), write(' jest matka '), write(Kogo). | ?- Kto = kasia, call(matka(Kto,Kogo)), write(Kto), write(' jest matka '), write(Kogo). |
?- Matka=kasia, Dziecko=robert, clause(matka(Matka,Dziecko),Kiedy), write(Matka), write(' jest matka '), write(Dziecko), write(' wtedy gdy: '), write(Kiedy). | ?- Matka = kasia, Dziecko = robert, clause(matka(Matka,Dziecko),Kiedy), write(Matka), write(' jest matka '), write(Dziecko), write(' wtedy gdy: '), write(Kiedy). |
</code> | </code> |
| |
display(Q), | display(Q), |
call(Q), | call(Q), |
write(Kto), | write(Kto), nl. |
nl. | |
</code> | </code> |
| |
| |
a następnie przetestować i przemyśleć: | a następnie przetestować i przemyśleć: |
| |
| |
<code prolog> | <code prolog> |
?- odpowiedz. | ?- odpowiedz. |
| |
'matka' czy 'ojciec'? ojciec | 'matka' czy 'ojciec'? ojciec |
kogo? robert | kogo? robert |
rozwiaz3(G2). | rozwiaz3(G2). |
rozwiaz3(G) :- | rozwiaz3(G) :- |
write('Wywoluje: '), write(G), nl, | write('Wywoluje: '), write(G), nl, |
clause(G,B), | clause(G,B), |
rozwiaz3(B), | rozwiaz3(B), |
write('Wyjscie: '), write(G), nl. | write('Wyjscie: '), write(G), nl. |
</code> | </code> |
| |
?- rozwiaz1(matka(kasia,X)). | ?- rozwiaz1(matka(kasia,X)). |
| |
?- rozwiaz1((matka(kasia,X),matka(Y,robert))). | ?- rozwiaz1((matka(kasia,X), matka(Y,robert))). |
| |
?- rozwiaz2((matka(kasia,X),matka(Y,robert))). | ?- rozwiaz2((matka(kasia,X), matka(Y,robert))). |
| |
?- rozwiaz3((matka(kasia,X),matka(Y,robert))). | ?- rozwiaz3((matka(kasia,X), matka(Y,robert))). |
</code> | </code> |
| |