1. Bron. Agatha, Isa en Nick hebben alle drie een ander soort fiets. Eén van hen heeft een elektrische fiets, één heeft een racefiets en één heeft een mountainbike. De fietsen hebben elk een andere kleur: groen, blauw of zwart. De drie eigenaren doen elk twee uitspraken, waarvan er één waar is en één onwaar is: Precies één van de volgende beweringen is met zekerheid waar. Welke?
    1. Agatha heeft een groene fiets.
    2. Agatha heeft een mountainbike.
    3. Isa heeft een groene fiets.
    4. Isa heeft een mountainbike.
    5. Nick heeft een elektrische fiets.
    
    % Een voorzet
    % eigen implementatie xor (alleen True als X en Y verschillend zijn (X,Y)=(True,False) of (X,Y)=(False,True).
    % operator \+ is de negatie operator \+ True = False, \+ False = True.
    beweringFiets(X,Y):- X,\+Y.
    beweringFiets(Y,X):- X,\+Y.
    
    losOp(Fietsen):-
        Kleuren = [groen,zwart,rood],
    	Typen   = [racefiets,mountainbike,elektrisch],
    	member(K1,Kleuren),	
        member(K2,Kleuren),
        member(K3,Kleuren),
        member(T1,Typen),
        member(T2,Typen),
    	member(T3,Typen),
    	Fietsen = [fiets(agaat,T1,K1 ),fiets(isa,T2,K2 ),fiets(nick,T3,K3 )],
        K1\=K2,				%  K1 is niet gelijk aan K2 want we willen verschillende kleuren
    ... ,
     	beweringFiets(
            member(fiets(nick,_,blauw),Fietsen ),
            member(fiets(_,racefiets,zwart),Fietsen )). %uitspraken Nick
    
    /** vraag die leidt tot de oplossing
    ?- findall(Fietsen,losOp(Fietsen),R),length(R,L).
    */
    
    		
    		

    Antwoord: Code hier of leidt naar B.

  2. Bron: We are marooned on an island that has the following curious property: Everyone over a certain age lies all the time. More specifically, there is an age limit L — a positive integer — and all islanders who are younger than age L only tell the truth, while islanders who are at least L years old only tell lies.

    We are greeted by five islanders who make the following statements:

    A: “B is more than 20 years old.”
    B: “C is more than 18 years old.”
    C: “D is less than 22 years old.”
    D: “E is not 17 years old.”
    E: “A is more than 21 years old.”
    A: “D is more than 16 years old.”
    B: “E is less than 20 years old.”
    C: “A is 19 years old.”
    D: “B is 20 years old.”
    E: “C is less than 18 years old.”

    What is L? And what did we just learn about the ages of the islanders?

    
    % Eis dat een persoon ouder is dan een leeftijd
    eis_ouder(Persoon, Leeftijd) :- Persoon > Leeftijd.
    
    % Eis dat een persoon jonger is dan een leeftijd
    eis_jonger(Persoon, Leeftijd) :- Persoon < Leeftijd.
    
    
    
    /** 
    ?- between(10,40,A),eis_ouder(A, 15),eis_jonger(A, 18).
    */
    
    
    https://swish.swi-prolog.org/p/LiarsOnTheIsland.pl
  3. Meer puzzels en vragen zijn te vinden op PUZZLES in Prolog en Ninety-Nine Prolog Problems