Diferencia entre revisiones de «Primer Parcial 1er Cuat 2006 (Paradigmas)»
De Cuba-Wiki
Línea 8: | Línea 8: | ||
==Ejercicio 2== | ==Ejercicio 2== | ||
*a) | |||
primFoldBinTree::(BinTree a->BinTree a->a->b->b->b)->b->BinTree a->b | |||
primFoldBinTree f z Nil = z | |||
primFoldBinTree f z (Bin n i d) = f i d n (primFoldBinTree f z i) (primFoldBinTree f z d) | |||
*b) | |||
foldBinTree::(a->b->b->b)->b->BinTree a->b | |||
foldBinTree g z a = primFoldBinTree (\a1 a2 n r1 r2 -> g n r1 r2) z a | |||
*c) | |||
elemSearchTree::Ord a=>a->SearchTree a->Bool | |||
elemSearchTree e a = foldBinTree (\n x1 x2 -> if n==e then true else if n>e then x1 else x2) false a | |||
*d) | |||
insertSearchTree::Ord a=>a->SearchTree a->SearchTree a | |||
insertSearchTree e a = primFoldBinTree (\i d n ri rd -> if e>=n then Branch n i rd) else (Branch n ri d)) (Branch e Nil Nil) a | |||
==Ejercicio 3== | ==Ejercicio 3== | ||
==Ejercicio 4== | ==Ejercicio 4== |
Revisión del 04:08 30 abr 2008
Ejercicio 1
locate::String->String->Nat locate s c = foldr (\t r1 -> if (t==c) then 1+r1 else r1) 0 s
transpose::String->String->String transpose s1 s2 s3 = foldr (\c r1 -> (s1 !! (locate s2 c)) : r1) [] s3
Ejercicio 2
- a)
primFoldBinTree::(BinTree a->BinTree a->a->b->b->b)->b->BinTree a->b primFoldBinTree f z Nil = z primFoldBinTree f z (Bin n i d) = f i d n (primFoldBinTree f z i) (primFoldBinTree f z d)
- b)
foldBinTree::(a->b->b->b)->b->BinTree a->b foldBinTree g z a = primFoldBinTree (\a1 a2 n r1 r2 -> g n r1 r2) z a
- c)
elemSearchTree::Ord a=>a->SearchTree a->Bool elemSearchTree e a = foldBinTree (\n x1 x2 -> if n==e then true else if n>e then x1 else x2) false a
- d)
insertSearchTree::Ord a=>a->SearchTree a->SearchTree a insertSearchTree e a = primFoldBinTree (\i d n ri rd -> if e>=n then Branch n i rd) else (Branch n ri d)) (Branch e Nil Nil) a