FAQ1: Logikprogrammering

  1. 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.

  2. 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)).

  3. 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.

  4. 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.