;; Funcions i definicions del llibre: ;; Vicenc Torra, ;; Fonaments de la intel·ligència artificial, ;; Editorial UOC, 2007. ;; ;; Funcio per recarregar el fitxer (defun recarregaLisp () (load "seccioLisp.v01.lsp")) ;; Capítol VI.1. Introducció al Lisp ;; Secció 1.7. Definició de funcions (defun segon (x) (car (cdr x))) (defun maxim (x y) (if (< x y) y x)) (defun fact (x) (if (< x 1) 1 (* x (fact (- x 1))))) (defun fib (x) (cond ((= x 0) 1) ((= x 1) 1) (t (+ (fib (- x 1)) (fib (- x 2)))))) (defun longitud (L) (if (null L) 0 (+ 1 (longitud (cdr L))))) ;; Secció 1.8. Àmbits i declaracions (defun eq2grau (a b c) (let ((disc (sqrt (- (* b b) (* 4 a c))))) (list (/ (+ (- 0 b) disc) (* 2 a)) (/ (- (- 0 b) disc) (* 2 a))))) ;; Definició alternativa amb let* (defun eq2grauP (a b c) (let* ((b2 (* b b)) (4ac (* 4 a c)) (disc (sqrt (- b2 4ac)))) (list (/ (+ (- 0 b) disc) (* 2 a)) (/ (- (- 0 b) disc) (* 2 a))))) ;; Secció 1.9. Construccions avançades ;; Definició d'una matriu (setq M '((1 2 3) (4 5 6))) ;; Funció per transposar una matriu (defun transposa (matriu) (if (null (car matriu)) nil (cons (mapcar #'car matriu) (transposa (mapcar #'cdr matriu))))) ;; Producte escalar de dos vectors (defun producte-escalar(x y)(apply #'+ (mapcar #'* x y))) ;; Funció per calcular el producte de dues matrius (defun producte2matrius (m1 m2) (mapcar #'(lambda (fila) (mapcar #'(lambda (colM2) (producte-escalar fila colM2)) (transposa m2))) m1)) ;; Secció 1.10. Construccions imperatives i efectes secundaris (defun Hanoi (n origen destinació auxiliar) (if (= n 1) (moure 1 origen destinació) (progn (Hanoi (- n 1) origen auxiliar destinació) (moure n origen destinació) (Hanoi (- n 1) auxiliar destinació origen)))) (defun moure (k origen destinació) (print (list 'mou 'disc k 'des 'de 'columna origen 'a 'columna destinació)))