Progdigmas
1. Geef de normaalvorm van volgende expressies:
(a) ((\x.\y.\z.(y x) (x y)) (u z)) y)
(b) (\x.(\y.(x (y y)) \z.(x (z z))) (\u.\v.u w))
\
maar ik houd ni zo van latex op dit forum
2. Een lijst [E1,E2,E3] kan voorgesteld worden als \z.((z E1) \z((z E2) \z.((z E3) nil)))
- Is dit een combinator? Waarom?
- Indien niet, geef een combinator voor de operatie "vorm een lijst met 3 elementen".
3. Leg uit waarom zelf-applicatie niet mogelijk is in de getypeerde Lambda-calculus
4. Schrijf een programma dat opeenvolgende duplicaten van lijstelementen elimineert.
(a) In prolog: Verwachte werking
Code: Select all
?- compress([a,a,a,a,b,c,c,a,a,d,e,e,e,e], X).
X= [a,b,c,a,d,e]
(b) In haskell:
Code: Select all
*Main> compress ['a', 'a,' 'a', 'a', 'b', 'c', 'c', 'a', 'a', 'd', 'e', 'e', 'e']
"abcade"
5. Schrijf een programma dat gegeven een begin en eindindex een slice uit een lijst kan extraheren
(a) In Prolog
Code: Select all
?- slice([a,b,c,d,e,f,g,h,i,j,k], 3, 7, L).
L = [c,d,e,f,g]
(b) In Haskell
Code: Select all
*Main> slice ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'] 3 7
"cdefg"
Puntenverdeling 9pt theorie (eerste 3 vragen), 9pt praktijk (laatste 2 vragen), 2pt evaluatie in het jaar