Mini-lisp – Épreuve régionale 2006

Niveau 6

É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.

Contraintes d'exécution

Utilisation mémoire maximum
1000 kilo-octets
Temps d'exécution maximum
2500 millisecondes

Exemples d'entrée/sortie

Exemple d'entrée
11
(1 2 -3 77)
Exemple de sortie
(1 2 -3 77)
Exemple d'entrée
8
(+ 5 -3)
Exemple de sortie
2