Énoncé¶
Votre fonction doit afficher le résultat de l'opération Lisp passée en paramètre. Une opération Lisp correspond à une liste de nombres (appelés atomes) débutant éventuellement par un opérateur : - (opérateur n1 [n2 n3 ...]) Les listes peuvent être imbriquées, par exemple (+ (- 3 2) 1) donne 2.
LISTE DES OPÉRATEURS¶
- "+" : addition
- "-" : soustration
- "/" : division
- "*" : multiplication (notez que tous ces opérateurs ne sont pas nécessairement binaires ; (/ 6 3 2) doit s'interpréter comme (6/3)/2, en notation infixe usuelle)
- "<" : inférieur
- "<=" : inférieur ou égal
- ">" : supérieur
- ">=" : supérieur ou égal
- "car" : premier élément de la liste
- "cdr" : liste privée de son premier élément
- "cdar" : deuxième élément de la liste
- "c??????r" (avec les ? = a ou d) : concaténation des deux formes précédentes, par exemple (cadr (cdr 3 4 5) 6) = (5)
EXEMPLES¶
- () = ()
- (+ 1 2) = 3
- (* 2 4) = 8
- (/ 2 4) = 0
- (+ (- 3 2) 1) = 2
- (< 1 2 3) = 1 (car 1 < 2 < 3)
- (> 1 2 3) = 0 (car on n'a pas 1 > 2)
- (car 1 2 3) = 1
- (cdr 1 2 3) = (2 3)
- (cdar 1 2 3) = 2
- (cddr 1 2 3) = (3)
Votre fonction prend en paramètre une chaîne et renvoie aussi le résultat sous forme d'une chaîne.
Entrée¶
L'entrée contient deux lignes :
- Le nombre de caractères de la deuxième ligne.
- L'expression Lisp à évaluer.
Sortie¶
La sortie contient une ligne :
- Le résultat de l'exécution, qui peut être un nombre ou une liste de nombres, formatée comme dans les exemples ci-dessus.