Examen de P6

Sans document ni moyen de communication. Répondre directement sur la feuille.
Durée : maximum 90 minutes + 1/3 temps (20 points  ->  en moyenne, 4,5 minutes maximum par point).

Partie de Philippe Martin (4 points)

  1. [1,25 point]   Ecrivez en Lisp
    A) la définition de la fonction reverse qui, comme vu en TP, i) prend en paramètre une liste L,
        ii) retourne une liste dont les éléments sont les mêmes que L mais dans l'ordre inverse,
        iii) effectue cela en appelant une fonction reverse2 qui a 2 listes pour arguments : L1 et L2 ;
    B) la définition de la fonction reverse2 ;
    C) l'appel de la fonction reverse sur une liste contenant les entiers 1, 2 et 3.
    Vous pouvez bien-sûr réutiliser les fonctions primitives de Lisp, e.g., car, cdr, list, null :
    car prend le 1er élément d'une liste,  cdr renvoie le reste,
    list crée une liste avec un élément,  null renvoie false si la liste est vide.
    Indentez correctement, e.g., i) lorsque vous fermez une parenthèse, cela doit être sur la même
    ligne ou la même colonne que la parenthèse ouvrante correspondante, ii) utilisez 2 ou 3 espaces
    pour chaque nouvelle indentation, iii) ne perdez pas de place inutilement (-> pas de saut de ligne,
    remplissez les lignes tant que cela reste lisible, ...).
    Comme toujours, tout non-respect des consignes sera pénalisé.
    (defun reverse (L) (reverse2 L nil))
    
    (defun reverse2 (L1 L2)
      (if (null L1) L2
         (reverse2 (cdr L1) (cons (car L1) L2))
     "or:(reverse2 (cdr L1) (append (list (car L1)) L2))"
      )
    )
    
    (reverse '(1 2 3))
    
    
  2. [1,5 point]   Ecrivez en Lisp la définition de la fonction last qui renvoie le dernier élément
    d'une liste L. Indentez correctement. Ne ré-utilisez pas la fonction reverse.
    (defun last (L)
      (if (null L) nil
        (if (null (cdr L)) (car L)
          (last (cdr L))
        )
      )
    )
    
    
  3. [1,25 point]   Donnez un nom puis, en 3 ou 4 lignes environ, une définition (informelle mais correcte) d'au moins une propriété intéressante que l'on trouve généralement dans un langage fonctionnel et généralement pas dans un langage procédural.
    Vous pouvez en plus, en 1 ou 2 lignes, donner un exemple pour illustrer votre définition.
    Vous pouvez lister des définitions de plusieurs propriétés pour augmenter vos chances de fournir une définition correcte ; ceci ne sera pas pénalisé.