DIFFICULTE
LIMITE DE MEMOIRE
1000 ko
LIMITE DE TEMPS
2500 ms
É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
- (+ (- 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.
EXEMPLE(S) D'ENTREE/SORTIE
Exemple 1
en entrée ...
11 (1 2 -3 77) |
(1 2 -3 77) |
Exemple 2
en entrée ...
8 (+ 5 -3) |
2 |





