====== Examen Final - 75.14. Lenguajes Formales - 19/06/07 ======
**Cátedra:** Monica Kuhn\\
**Fecha:** 1º Oportunidad - 1º Cuatrimestre 2007\\
**Día:** 19/06/2007
===== Enunciado =====
==== Lambda ====
Se pide identific variables libres y ligdas, y reducir por orden normal y aplicativo la siguiente expresión lambda (no realizar cambios de variable de mas)
((&w.&x. w) ((&w.x w) t)) ((&w.x) t)
==== LISP ====
Dadas dos matrices cuadradas M y N de igual tamaño, definir una función JUNTAR, que reciba ambas matrices como parámetros y devuelva una nueva matriz, con la misma cantidad de filas y el doble de columnas que M y N dispuestos como indican las flechas
(setq n '((a b c d) (e f g h) (i j k l) (m n o p)))
(setq m '((1 2 3 4) (5 6 7 8) (9 10 11 12) (13 14 15 16)))
{{:materias:75:14:matrizlisp.jpg|:materias:75:14:matrizlisp.jpg}}
===== Resolución =====
==== Lambda ====
((&w.&x.w) ((&w.xw)t)) ((&w.x)t)
=== Orden Normal ==
((&w.&j.w) ((&w.wx)t)) ((&w.x)t)
(&j.((&w.xw)t)) ((&w.x)t)
((&w.xw)t)
xt
=== Orden Aplicativo ===
((&w.&x.w) (xt) (x))
((&j.xt) x)
xt
==== Lisp ====
(defun juntar (M N)
(if (null M)
nil
(cons (intercalar (invertir (alpha 'car N)) (invertir (car M))) (juntar (cdr M) (alpha 'cdr M)))
)
)
(defun invertir (L)
(if (null L)
nil
(append (invertir (cdr L)) (list (car L)))
)
)
(defun intercalar (L1 L2)
(if (null L1)
nil
(append (list (car L1) (car L2)) (intercalar (cdr L1) (cdr L2)))
)
)
(defun alpha (F L)
(if (null L)
nil
(append (list (funcall F (car L))) (alpha F (cdr L)))
)
)
===== Discusión =====
Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.