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 | ?- 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']. Kommentarer: tegnet % angir at resten av linjen er en kommentar, mens /* kommentar over flere linjer */ angis som vist. Negasjon kan angis ved \+ 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)