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

Kde nájsť SWI-Prolog v CPU a ako s ním začať pracovať?

V CPU je SWI-Prolog nainstalovany.

Spustenie:

  1. start ... run ... cmd (nabehne konzola)
  2. je dobre ostat v tom adresari,
    	C:\Documents and Settings\vas-login
    
    kde mate pravo vytvarat nove subory
  3. spustite si Prolog
            J:\Programovanie\SWIProlog\bin\swipl-win.exe
    
    (nabehne okno so shell-om).
  4. Prolog odpoveda na bezne dopyty:
            ?- a == b.
            fail
    
            ?- a == a.
            true
    
  5. 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).
    
  6. 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.
  7. v shelli potom mozno pomocou dopytov ten program otestovat:
            ?- dobry([]).
            yes.
    
            ?- dobry([10, 18, 30]).
            yes.
    
            ?- dobry([10, 18, -5]).
            no
    
  8. 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

Home
Research
Projects
Publications
Books
SCM
Teaching
Links
Last updated:
Mária Bieliková bielik [zavináč] fiit-dot-stuba-dot-sk
Design © 2oo1 KoXo