/* * Opgaver til Prolog fra ugeseddel 12 * Eksamen 2001 januar */ /* Opgave 1.a */ myst([H|T] - [H|S], T - S). /* | ?- myst([1,2,3,4] - [1,2], X). X = [2,3,4]-[2] yes */ /* Opgave 1.b */ /* | ?- myst([1,2,3,4] - [1,2], X), myst(X,Y). X = [2,3,4]-[2] Y = [3,4]-[] yes */ /* Opgave 1.c */ /* | ?- myst(X - Y, [1,2] - Z). X = [A,1,2] Y = [A|Z] yes */ /* Opgave 1.d */ /* Der er flere mulige løsninger, vi kan bruge myst på denne måde: | ?- myst([1,2,3,4|Y] - Y, Z). Y = [1|A] Z = [2,3,4,1|A]-A yes Dvs. til at rotere en gang: */ rotate(N, L, A) :- append(L, V, LV), rot(N, LV - V, A - []). rot(0, A, A). rot(N, A, C) :- N > 0, myst(A, B), N1 is N - 1, rot(N1, B, C). /* Opgave 1.e */ /* Udgaven vil også virke den anden vej; vi får: | ?- rotate(2, Y, [a,b,c,d,e,f]). Y = [e,f,a,b,c,d] ? yes */ /* Opgave 2.a */ /* Se løsningen under "bemærkninger" til eksamensopgaverne */ /* Opgave 2.b */ p(a). p(b) :- q(X), p(X). p(c) :- q(c), !, p(_). q(c). /* Vi få følgende: | ?- q(X), p(X). X = c ? X = c ? X = ... fortsætter på samme måde med "c" | ?- q(c), !, p(X). X = a ? X = b ? X = b ? X = ... fortsætter på samme måde med "b" */