PROLOG: Otázky a odpovede
Otázky môžete posielať elektronicky na adresu bielik [zavináč] fiit[.]stuba[.]sk.
Zoznam otázok podľa okruhov
- SWI Prolog
- Arity Prolog
- LPA Prolog
- Prologovský program a predikáty
SWI Prolog
Kde nájsť SWI-Prolog v CPU a ako s ním začať pracovať?
V CPU je SWI-Prolog nainstalovany.
Spustenie:
- start ... run ... cmd
(nabehne konzola)
- je dobre ostat v tom adresari,
C:\Documents and Settings\vas-login
kde mate pravo vytvarat nove subory
- spustite si Prolog
J:\Programovanie\SWIProlog\bin\swipl-win.exe
(nabehne okno so shell-om).
- Prolog odpoveda na bezne dopyty:
?- a == b.
fail
?- a == a.
true
- pomocou nejakeho vhodneho editora vytvorte vo svojom adresari
(z ktoreho ste spustili Prolog) subor
prvy.pl , ktory obsahuje
prislusne fakty a pravidla. Napriklad:
% Predikat dobry/1 sa splni vtedy, ked zadany zoznam obsahuje len
% kladne cisla.
dobry([]).
dobry([H|T]) :-
number(H),
0 =< H,
dobry(T).
- aby Prolog tieto fakty a pravidla videl, treba ich s nim "skonzultovat".
To sa robi tak, ze v shelli zadate:
?- consult(prvy).
Ak v programe mate chybu, kompilator vam vynada. Inak program prijme.
- v shelli potom mozno pomocou dopytov ten program otestovat:
?- dobry([]).
yes.
?- dobry([10, 18, 30]).
yes.
?- dobry([10, 18, -5]).
no
- ak zmenite vstupny subor s programom (
prvy_program.pl ), tak sa zmeny v shell-i objavia az po tom, ked znovu vykonate:
?- consult(prvy).
SWI-Prolog podporuje historiu.
Sipkou hore sa mozte vratit k predchadzajcim dopytom, modifikovat ich
a znovu ich spustit.
Odpovedal: Matej Košík a Martin Labaj
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
Kde získať a ako pracovať v SWI-Prologu?
Inštalácia SWI Prologu
SWI Prolog (aktuálne ver. 6.0.0) sa dá voľne stiahnuť na http://www.swi-prolog.org/download/stable pre operačné systémy Windows a MacOSX. Pre Linux distribúciu Debian (a odvodené: Ubuntu, Mint, ...) je SWI-Prolog v balíčkovacom systéme a stačí použiť príkaz sudo apt-get install swi-prolog . Informácie o ostatných Linux distribúciách nájdete na tejto stránke.
Štandardne sa SWI Prolog nainštaluje ako swipl . Môžeme v ňom pracovať jednoduchým spustením programu:
% swipl
Práca v SWI Prologu
Vytvoríme prologovský program v ľubovolnom editore, mal by mať príponu .pl.
Po spustení Prologu zvyčajne natiahneme program pomocou predikátu consult/1 alebo zadaním príkazu
?- [meno programu].
Ak bol program úspešne načítaný, môžeme zadávať dopyty. Prolog sa ich pokúsi splniť a v prípade splnenia vypíše nadviazania premenných.
Používateľskú príručku sprístupníme príkazom
?-help.
Prácu s Prologom ukončíme príkazom
?-halt.
Ladenie v SWI Prologu
Najprv predikátom guitracer/0 zvolíme window-based nástroj na ladenie.
Predikátmi trace/0 a spy/1 nastavíme debug mode .
Odpovedala: Katarína Uherková a Martin Labaj
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
Arity Prolog
Ako spustiť Arity prolog?
Arity Prolog už nepoužívame, ale z historických a nostalgických dôvodov to tu nechávame :-))
Arity prolog je DOS-ovský program. Vyžaduje nastavenie
DEVICE=C:\DOS\ANSI.SYS /K
(predpokladá sa cesta C:\DOS k ovládaču ANSI.SYS ).
Odpovedala: Mária Bieliková
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
Ako editovať program v Arity prologu?
Odporúčam použiť vstavaný editor. Editor sa dá spustiť pomocou menu alebo klávesom F8 .
Odporúčam nastaviť v menu Buffers položku Save on exit a Reconsult on exit. Potom vždy pri prechode medzi editorom a interpretom prologu sa súbor uchová na disk a zmeny sa objavia aj v databáza prologu.
Späť z editora do interpretu sa dostanete znovu pomocou menu alebo klávesom F8 .
Odpovedala: Mária Bieliková
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
Ako ladiť program v Arity prologu?
Help sa vyvolá klávesom F1 . Pozrite sa na predikáty spy , nospy , trace a notrace . Trasovanie sa dá zapnúť aj pomocou menu.
Odpovedala: Mária Bieliková
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
LPA Prolog
Kde nájsť a ako začať s LPA prologom?
LPA-Prolog už nepoužívame, ale z historických a nostalgických dôvodov to tu nechávame :-))
Pomocou nejakeho programu (Windows Commander, FAR ap.) skopirujte adresar:
J:\Programovanie\LPAprol
niekde na lokalny disk. Napriklad do adresara:
C:\Documents and Settings\vas-login\tmp
Tam (v tej svojej lokalnej kopii) spustite exe-cko
pro386w.exe
Objavi sa okno s Prolog shell-om, do ktoreho je mozne pisat Prologovske dopyty:
?- a == b.
fail
?- a == a.
true
Ak chcete vytvorit Prologovsky program (s faktami a pravidlami), tak mozte postupovat takto:
- V tom adresari, kde mate svoju kopiu spustitelneho suboru
pro386w.exe
vytvorte subor s priponou *.pl , napr. prvy.pl
s prislusnymi faktami a pravidlami. Napriklad:
% Predikat dobry/1 sa splni vtedy, ked zadany zoznam obsahuje len
% kladne cisla.
dobry([]).
dobry([H|T]) :-
number(H),
0 < H,
dobry(T).
POZN: Posledny riadok by tiez mal obsahovat znak koniec riadka, inak
LPA-Prolog protestuje.
- aby Prolog tieto fakty a pravidla videl, je potrebne ich s nim "skonzultovat".
To sa robi tak, ze v shell-i zadate:
?- consult(prvy).
To "prvy" je atom, ktory urcuje meno suboru, ktory sa ma "skonzultovat".
Ak v programe mate chybu, kompilator vam vynada. Inak program prijme.
- v shell-i je potom mozne pomocou dopytov ten program otestovat:
?- dobry([]).
yes.
?- dobry([10, 18, 30]).
yes.
?- dobry([10, 18, -5]).
no
- ak zmenite vstupny subor s programom ("prvy.pl"), tak sa zmeny v shell-i objavia az po tom, ked znovu vykonate:
?- consult(prvy).
Odpovedal: Matej Košík
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
Ako ladiť program v LPA prologu?
Pozrite sa na predikáty spy , nospy , trace a notrace . Trasovanie sa dá zapnúť aj pomocou menu.
V položke menu Options - Preferences môžete nastaviť rôzne režimy trasovania. Odporúčam používať Source level debugger a Box model debugger (Arity prolog používa "Box model").
Odpovedala: Mária Bieliková
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
Aké sú základné rozdiely medzi Arity prologom a LPA prologom?
Najdôležitejšie rozdiely sú:
- V Arity prologu možno použiť aj datový svet (dokonca niekoľko); LPA prolog má iba jednu spoločnú databázu pre data aj program.
- Práca so súbormi (predikáty
open a close ) je odlišná. Aby sme zachovali prenosnosť programov treba používať menej efektívnejšie predikáty see/1 , seen/0 , tell/1 a told/0 , ktoré definuje štandard a sú implementované v oboch prologoch s rovnakou sémantikou.
- V súvislosti s aritmetickými operáciami je rozdiel v rozsahu čísel. Ďalej vyhodnotenie výrazu, v ktorom sú aj iné termy ako čísla spôsobí štandardne v LPA prologu chybu (napr. Error 23 : Type Error, Error 22 : Instantiation Error, Error 50 : Function Not Defined). V Arity prologu sa každý výraz vyhodnotí, v prípade nesprávneho výrazu bude hodnota výrazu atóm
err .
Poznamenajme, že v LPA prologu sa dá potlačiť výpis chybových správ a tiež výsledok odvodenia v takomto prípade (pozri predikát '?ERROR?' ).
- Arity prolog poskytuje vstavané predikáty na prácu s b-stromami a hashovacou tabuľkou.
Odpovedala: Mária Bieliková
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
Prologovský program a predikáty
Ako sa dá definovať predikát faktorial tak, aby pri požiadavke nájdenia ďalšieho riešenia vypísal no ?
Autor otázky: Peter Trebatický
> Chcel by som sa opytat, ako sa da definovat predikat faktorial tak,
> aby pri poziadavke najdenia dalsieho riesenia vypisal no.
>
> ?- faktorial(4,X).
> X = 24 ;
> no
> ?- faktorial(X,24).
> X = 4 ;
> no
>
Z principu definovania predikatu faktorial (tak ako som ho uviedla na prednaske)
sa tento problem neda priamov predikate vyriesit (on postupne pocita faktorialy
dovtedy, kym nenajde ten, ktory treba - keby sme zabranili spetnemu chodu, tak
by nezistil nic).
Da sa to ale samozrejme spravit o uroven vyssie:
faktorial(N, F) :- fakt_aux(N, F), !.
fakt_aux(0,1).
fakt_aux(N,F) :-
fakt_aux(N1, F1),
N is N1 + 1,
F is F1 * N.
Odpovedala: Mária Bieliková
|
to Homepage |
|
to Teaching |
|
to FLP |
|
to the Top |
|
|
|
|