********************************************** Hentet fra INF3110 høsten 2003, lettere redigert av Christian M. Hansen 19.01.2004 ********************************************** Her er en kort innføring i hvordan man kan bruke SICSTUS PROLOG =============================================================== Oppstart: Man kan starte sicstus prolog ved unix-kommandoen: sicstus Når sicstus er klar for bruker-input svarer den med linjen | ?- Alternativ oppstart: /local/snacks/bin/ile sicstus Denne får med pil- og redigeringstaster. Pr. 19.01.04 har jeg problemer med å kjøre Sicstus under Linux. Ta en 'rlogin login' for å logge på en Solaris-maskin. Avslutning: f.eks. ved å si halt. Hjelp: ved å gjøre control-c får man en meny og man kan f.eks. be om hjelp, ved å skrive: h Innlesning fra fil: man kan lese inn prolog-kode fra en fil ved å skrive consult(filnavn) eller [filnavn]. Om filen har suffikset .pl behøver man ikke skrivet dette. Om filnavnet inneholder tegn bør man sette det i enkle gåseøyne, som i ['filnavn']. For å skrive inn setninger manuelt, kan man skrive [user]. Man får promptet | og man kan skrive inn fakta og regler manuelt. Gå till toppnivå med CTRL-D Kommentarer: tegnet % angir at resten av linjen er en kommentar, mens /* kommentar over flere linjer */ angis som vist. Negasjon kan angis ved \+ (NB! Negasjon i Prolog er ikke det samme som logisk negasjon! Må brukes med forsiktighet!) mens == angir "unifiserbart like" og \== det motsatte. Eksempler på enkel sicstus-kjøring (av Maja Bratseth) filen fakultet.pl: ----------------------------------------- fak(0,1) :- !. % cut. Gjør at denne grenen ikke prøves flere ganger. fak(N,S) :- M is N-1, fak(M,T), S is N*T. ----------------------------------------- Legg den i katalogen du kjører sicstus fra. Bruk av predikatene i fakultet.pl: ---------------------------------- >sicstus | ?- consult(fakultet). yes | ?- fak(3,X). X = 6 ? ; no | ?- halt. > ----------------------------------- consult leser inn predikatene i filen og lagrer dem i interpretert versjon. Navnet inni consult må være et lovlig prolog-atom. Når filen slutter på .pl finner sicstus den hvis du skriver navnet uten ending. Hvis den har en annen ending eller navnet ikke er et atom, må filnavnet stå i enkle anførselstegn. "[fakultet]" gjør det samme som "consult(fakultet)". Laging av kjørbar fil: ------------------------------------------------------------------ >sicstus | ?- consult(fakultet). yes | ?- save(fakultet). yes | ?- halt. >fakultet yes | ?- fak(3,X). X = 6 ? yes | ?- halt. > ------------------------------------------------------------------- Den kjørbare filen "fakultet" ble lagt i katalogen du kjører sicstus fra. Når du kjører den startes sicstus og du kan fortsette der du slapp. Dette er alt du trenger å vite for å bruke sicstus i dette kurset. For de som vil vite mer fins manualen på http://www.sics.se/isl/sicstus/ evt. http://www.cs.usask.ca/resources/documentation/sicstus/ ===================================================== For de mer interesserte: Her er en versjon av fakultet og av fib som er flinkere til å regne med tall (igjen laget av Maja Bratseth): %% fak(?X, ?Y) fak(0, 1). fak(X, Y) :- fak_aux(X, Y, 1, 1). fak_aux(N, S, N, S). fak_aux(N, S, Teller, Produkt) :- ( var(S) ; Produkt < S ), !, ( var(N) ; Teller =< N ), !, Teller2 is Teller + 1, Produkt2 is Produkt * Teller2, fak_aux(N, S, Teller2, Produkt2). %% fib(?Nr, ?Tall) fib(1, 1). fib(Nr, Tall) :- fib_aux(Nr, Tall, 2, 1, 1). fib_aux(Nr, Tall, Nr, Tall, _). fib_aux(Nr, Tall, Teller, Sum, Sum2) :- (var(Nr) ; Teller < Nr), !, (var(Tall) ; Sum < Tall), !, T is Teller + 1, Nysum is Sum + Sum2, fib_aux(Nr, Tall, T, Nysum, Sum)