Antwoorden Opgave 1: Welcome to SWI-Prolog (Multi-threaded, Version 5.2.0) Copyright (c) 1990-2003 University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). ?- [a,b|X]=[A,B,c]. X = [c] A = a B = b ; No ?- [a,b]=[b,a]. No ?- [a|[b,c]]=[a,b,c]. Yes ?- [a,[b,c]]=[a,b,c]. No ?- [a,X]=[X,b]. No ?- [a|[]]=[X]. X = a ; No ?- [a,b,X,c]=[A,B,Y]. No ?- [H|T]=[[a,b],[c,d]]. H = [a, b] T = [[c, d]] ; No ?- [[X],Y]=[a,b]. No ?- [X|Y]=[a]. X = a Y = [] ; No ?- X =.. [b,Y,[1,2]]. X = b(_G160, [1, 2]) Y = _G160 ; No ?- X =.. [X1,X2]. ERROR: Arguments are not sufficiently instantiated ?- X is 1, Y is X+1, Y < 3. X = 1 Y = 2 ; No ?- Y < 3, X is 1, Y is X+1. ERROR: Arguments are not sufficiently instantiated ?- X=3, Y=X+1, Z is Y. X = 3 Y = 3+1 Z = 4 ; No ?- Opgave 2: a. plaatje boom: ?- a(X,Y). X = 1 Y = 1 ; X = 1 Y = 2 ; X = 1 Y = 22 ; No b. ?- a(X,Y), !, b(B). X = 1 Y = 1 B = 1 ; X = 1 Y = 1 B = 11 ; No ?- Opgave 3: set_verschil([],_,[]). set_verschil([X|S1],S2,S3):- member(X,S2), set_verschil(S1,S2,S3). set_verschil([X|S1],S2,[X|S3]):- \+ member(X,S2), set_verschil(S1,S2,S3). Met groene cut: set_verschil([],_,[]). set_verschil([X|S1],S2,S3):- member(X,S2), !, set_verschil(S1,S2,S3). set_verschil([X|S1],S2,[X|S3]):- \+ member(X,S2), set_verschil(S1,S2,S3). - Procedurele gedrag = declaratieve gedrag - cut weghalen geeft dezelfde uitkomsten - uitsluitende clauses (member(..) en \+ member(..)) met rode cut set_verschil([],_,[]). set_verschil([X|S1],S2,S3):- member(X,S2), !, set_verschil(S1,S2,S3). set_verschil([X|S1],S2,[X|S3]):- %%%% \+ member(X,S2), set_verschil(S1,S2,S3). - Procedurele gedrag <> declaratieve gedrag Opgave 4: % opgave a expr(plus(X,Y)) --> basicexpr(X), addterm(Y). expr(maal(X,Y)) --> basicexpr(X), factorterm(Y). expr(X) --> basicexpr(X). basicexpr(1) --> [1]. basicexpr(2) --> [2]. basicexpr(3) --> [3]. addterm(X) --> [+], expr(X). factorterm(X) --> [*], expr(X). %opgave b meaning(plus(X,Y),Z):- meaning(X,MX), meaning(Y,MY), Z is MX+MY. meaning(maal(X,Y),Z):- meaning(X,MX), meaning(Y,MY), Z is MX*MY. meaning(X,X) :- integer(X).