PROGRAMMATION FONCTIONNELLE : LISP CAR : la fonction CAR retourne le 1er élément de la liste CDR : la fonction CDR retourne la liste moins le 1er élément CONS : la fonction CONS construit une liste Fonction puissance Définition : - xn = x * xn-1 - x0 = 1 (defun power (x n) ( if ( = n 0) 1 ( * x (power x (- n 1)) ) ) Version terminale avec la méthode : - La fonction enveloppante est associative et possède un élément neutre - a*(b*c)=(a*b)*c et a*1 = a (defun power (x n) (letn self (y x) (m n) (res 1)) ( if ( = m 0) (* 1 res) (self y ( - m 1) ( * res y)) ) ) ) Fonction factorielle Définition : - x ! = x * (x - 1) ! - 0!=1 (defun fact(x) ( cond (( = x 0) 1) ( * x fact (x – 1)) ) ) Version terminale récursive intuitive : (defun fact_aux(x res) ( if( = 0 x) res (fact_aux(- x 1)(* x res)) ) ) Version terminale récursive en appliquant la méthode : - La fonction enveloppante est associative et possède un élément neutre - a*(b*c)=(a*b)*c et a*1 = a Élément neutre de * (defun fact (x) (letn self (y x)(res 1)) fonction enveloppante (cond (( = y 0) (* 1 res)) (self (- y 1)( * y res)) ) ) ) de fac