;;; (C) 2009 ;;; Unicamp ;;; Instituto de Computacao ;;; Prof. Joao Meidanis ;;; MC336 B ;;; Prova 29/09/2009 - Lisp ;;; (1) SUPERINV (defun superinv (l) (superinv-aux l ()) ) (defun superinv-aux (l result) (cond ((null l) result) ((atom (car l)) (superinv-aux (cdr l) (cons (car l) result))) (t (superinv-aux (cdr l) (cons (superinv (car l)) result))) ) ) ;;; (2) UNIQUE (defun unique (l) (cond ((null l) ()) ((member (car l) (cdr l)) (unique (cdr l))) (t (cons (car l) (unique (cdr l)))) ) ) ;;; (3) POLY ;;; versao direta (defun poly (coef x) (poly-aux coef x (1- (length coef))) ) (defun poly-aux (coef x n) (if (null coef) 0 (+ (* (car coef) (expt x n)) (poly-aux (cdr coef) x (1- n))) ) ) ;;; versao reversa (defun poly (coef x) (poly-aux (reverse coef) x) ) (defun poly-aux (coef x) (if (null coef) 0 (+ (car coef) (* x (poly (cdr coef) x))) ) ) ;;; (4) PROD-TENS (alguns terao reconhecido o nome "produto tensorial" (defun prod-tens (l1 l2) (if (null l1) () (cons (mult-line (car l1) l2) (poly-tens (cdr l1) l2)) ) ) (defun mult-line (c line) (if (null line) () (cons (* c (car line)) (mult-line c (cdr line)) ) ) )