====== 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á.