Roskilde Universitetscenter, Datalogi

Modul 2 kursus

© 2000, Henning Christiansen

(undskyld layoutet, fremkommet ved "Save as html" fra Word)

 

Kort vejledning til brug af Prolog på RUC

Vi benytter fortrinsvis Sicstus Prolog på RUC, men de fleste Prolog-versioner overholder i det store og hele en de-facto standard. De eksempel, vi benytter på kurset, forventes at kunne køres uden problemer i de fleste versioner af Prolog. Der findes også en ISO-standard, som af en eller anden grund ikke har slået rigtigt an.

Sicstus Prolog på UNIX

Det forventes, at man har indtastet sit program på en fil ved hjælp af en teksteditor editor. Hvis du eksempelvis har indtastet et program på en fil med navn minfamilie, kan du starte Prolog og trække programmet ind i systemet som følger.

>prolog

et svar fra systemet, Prolog kører

?- [minfamilie].

et svar fra systemet, – evt. fejlmeddelelser

?- father(tom, bob).

et eller flere svar fra systemet, jvf. Bratkos bog

?- nyt spørgsmål.

og så videre

?- halt.

> tilbage i operativsystemet

Bemærk, at det er operativsystemet, som skriver ª>´, og Prolog, som skriver ª?-´. Hvis filnavnet indeholdet specialtegn så som punktummer og kolon’er, skal hele navnet omsluttes af enkeltanførselstegn, f.eks.

?- ['/bla/blop:huba.hop'].

Sicstus Prolog kan udskrive en række advarsler, når den indlæser et program, og specielt giver den advarsel, hvis en given variabel forekommer netop et gang i en klausul, og det er ofte tegn på, at man har skrevet en variabel forkert. Man kan slippe for at se denne type meddelelser, hvis man benytter den anonyme variabel, skrevet ª_´..

Manualen til Sicstus Prolog er tilgængelig på WWW:

http://www.sics.se/isl/sicstus/sicstus_toc.html

Sicstus Prolog på MAC

En tidligere version af Sicstus Prolog findes til Macintosh, som fungerer ganske udmærket til de eksempler, vi benytter på kurset. Sicstus Prolog startes på sædvanlig måde ved dobbelt-klik eller i Apple-menuen, hvorefter der dukker et dialogvindue op. Det er delt i to, man skriver og redigerer sine forespørgsler i den nederste del, og når man trykker linieskift, sendes forespørgslen til det den øverste del, hvor også Prologs svar fremkommer.

Et tekstdokument læses ind, enten som beskrevet ovenfor i Unix-versionen, eller, hvad der er meget nemmere, man ªdropper´ blot ikonen for dokumentet på den øverste halvdel af Sicstus’ dialogvindue. Undgå at bruge ª/´ og ª:´ i navne på filer og mapper, når du bruger Sicstus Prolog på Macintosh. Ellers får man engang i mellem nogle uforståelige meddelelser.

Sicstus Prolog på PC

... fungerer i det store og hele som Unix-versionen, og startes op i et DOS-agtigt vindue. Der er nogle uhensigtsmæssigheder i grænsefladen, som man vil opdage, men man kan vænne sig til dem.

 

Små syntaktiske forskelle

Bratko anvender i et par tilfælde sine egne navne på standardprædikater, som ikke svarer til de, som bruges i Sicstus Prolog, og der er også nogle få standardting, som ikke er omtalt i Bratko's bog. Her er en tabel over de vigtigste forskelle.

Betydning

Sicstus

Bratkos bog

sammensætning af lister

append

conc

negation-as-failure

\+

not

if-then-else-konstruktion

( betingelse -> mål

;

betingelse -> mål

;

...

; mål )

-ikke eksisterende-

If-then-else-konstruktionen er meget nyttig, og kan ofte medvirke til at få programmer til at se mere overskuelie ud. Der henvises til manualen for Sicstus Prolog for en præcis beskrivelse af semantikken (se www-adresse ovenfor).

De sædvanlige listeprædikater så som append o.lign. ligger hos Sicstus som et bibliotek, som man henter ind ved at skrive følgende i starten af sin programfil:

:- use_module(library(lists)).

Sicstus Prolog har et spændende begreb af corutiner og et rigt udbud af biblioteker, som kan give anledning til en lang række studenterprojekter.

Den lidt ældre version, som køre på Macintosh adskiller sig ikke mærkbart, bortset fra at den ikke har de seneste biblioteker. Bl.a. mangler ªConstraint Handling Rules´, som er meget spændende for de, som måtte interessere sig for constraint-programmering.

Brugervejledning til fortolkeren for Mini-stak-og-variabel-maskine

beskrevet i ªSprog og abstrakte maskiner´

Der foreligger en fortolker, i form af et Prolog-program. Programmerne i maskinens karakteristiske sprog skrives som lister, jvf. nedenstående eksempel, der viser, hvordan fortolkeren kaldes.

run_prog([stak(23),

gem(t),

7, hent(x),

stak(7),

udregn(+),

gem(x),

hent(t),

stak(1),

udregn(-),

gem(t),

hent(t),

stak(0),

udregn(=),

n_hop(7)], S, L).

Gives denne forespørgsel til Prolog fås et svar, hvor værdien for S angiver den afsluttende stak og L den afsluttende humkommelse over variable.

Fortolkerprogrammet er tilgængelig på modul-2-kursets elektroniske server, som er beskrevet andetsteds, med filnavnet 'mini'.

De operatorer, som kan angives til udregn-instruktionen er følgende:

+, -, *, >, >=, <, =<, =, =\=

(Skulle man savne en operator, kan man selv modificere fortolkeren).

Fortolkeren har en simpel trace-facilitet, som kan slås til ved en simpel rettelse i programteksten, og som er forklaret i kommentarerne.

Der gøres opmærksom på, at fortolkeren er skrevet med henblik på at være så enkel som mulig, og at der derfor ikke er lagt vægt på fejlcheck.