FAQ1: Logikprogrammering

  1. Fråga: Jag lyckas inte ladda in mitt program c:\My files\inlupp1.pl i SICStus - det verkar som om systemet inte kan hitta filen. Hur åtgärda?

    Svar: Du kan antingen skriva följande:
    ?- use_module(library(system)).
    ?- working_directory(Old,'c:/My files/').
    ?- ['inlupp1.pl'].

    eller:

    ?- ['c:/My files/inlupp1.pl'].

    I det senare fallet måste vägen till filen anges varje gång.

    I nyare Windows-versioner av SICStus kan det första alternativet väljas via menyval. I dessa kan dessutom default-mapp specificeras genom att högerklicka på sicstus.ex och via 'Properties' ange denna vid 'Start in:'.

  2. Fråga: Vi undrar om antagandet att listorna inte innehåller dubletter gäller för hela uppgiften, eller bara för unionpredikatet?

    Svar: Det gäller hela uppgiften.

  3. Fråga: Är det t.ex. meningen att man ska kunna konstruera alla möjliga frågor till en regel? Ett exempel: ?- snitt([b,c], X, [b]). Här används ju snitt på ett tveksamt sätt. Ska denna fråga vara definierad, och är i så fall svaret X=[b] ?

    Svar: Det räcker med att predikaten fungerar för de fall där de två första mängderna är givna (t.ex. snitt([a],[b],L)).

  4. Fråga: Får man ALLTID förutsätta att listorna inte innehåller dubletter? Ett test med mitt predikat "delmängd" ger nämligen följande lite otrevliga resultat... delmängd(A,[a,b]). A = [] ? ; A = [a] ? ; A = [a] ? ; A = [a,a] ? ; A = [a,a] ? ; A = [a,a,a] ? osv. Dessutom: | ?- delmängd([a],A). A = [a|_A] ? ; A = [a,_A|_B] ? ; A = [a,_A,_B|_C] ? ; A = [a,_A,_B,_C|_D] ? osv. Hmmm, är det OK att det funkar på det sättet?

    Svar: Det är ok! Predikaten behöver endast fungera på det sätt som anges i exemplen.

  5. Fråga: Jag sitter nu och föröker testa min inlämningsuppgift i AI, det är bara ett problem: jag får ingenting att fungera! Enligt Sicstus så finns det inget predikat som heter member, not, osv. Ska man inkludera någon fil någonstans? I så fall vilken?

    Svar: Du skall själv deklarera alla predikat som inte är inbyggda (t.ex. member, append etc.). I SICStus skriver man \+ istället för not.

  6. Fråga: Vad menas med väl kommenterad kod?
    Svar: Före varje predikatdefinition bör en kommentar på följande format läggas:

    % union(+Lista1,+Lista2,-Lista3)
    % Givet två listor utan dubletter Lista1 och Lista2,
    % så returneras en lista L3 innehållande unionen av de
    % två första listorna.

    + framför ett argumentnamn anger att detta argument förutsätts vara instansierat (dvs. skall betraktas som indata), medan - framför ett argumentnamn anger att detta kommer instansieras (dvs. skall betraktas som utdata).


Om din aktuella frågeställning inte finns med så kan hjälp erhållas från tony@dsv.su.se eller i FirstClass (underkonferensen AI Handledning i konferensen AI).