TD/TP n°5 : p-listes ou listes de propriétés

1. Rappels et compléments sur les p-listes ou listes de propriétés

1.1 Définition

Tout symbole (atome littéral) est lié à une valeur dans son environnement. On appelle c-valeur, sa valeur de liaison. Mais le langage Lisp a aussi prévu des mécanismes de liaison inspirés des bases de données et un symbole peut être lié à une liste de propriétés ou p-liste.

représentation des symboles

Une p-liste permet d'associer à un symbole plusieurs valeurs accessibles grâce à une clé, appelée encore propriété.

Par exemple, Pierre a

On dira que la valeur des propriétés

1.2 Les fonctions de manipulation

2. Problème : gestion d'une bibliothèque

On s'intéresse dans cet exercice à la construction d'une petite base de données permettant de gérer une bibliothèque de livres. Les informations que l'on doit gérer sont les suivantes : le titre, l'auteur et une liste de mot-clés.

Exercice 1 :

La bibliothèque est représentée par une liste d'identifiants, chacun de ceux-ci dénomme un livre particulier. Ecrire une fonction qui, à partir d'un paramètre identifiant un livre et de 3 autres paramètres correspondant aux informations à stocker sur ce livre, l'ajoute à la bibliothèque et construit pour chaque livre, une p-liste associée contenant les informations à gérer.

Exercice 2 :

Ecrire une fonction de recherche de livres, à partir du nom d'auteur. Cette fonction renverra la liste des identifiants de livres qui correspondent à cet auteur. Faire en sorte que cette fonction puisse aussi être utilisée pour une recherche sur le titre.

Exercice 3 :

Ecrire une fonction de recherche de livres, à partir d'un mot-clé. Cette fonction renverra la liste des identifiants de livres qui possèdent ce mot-clé dans leur liste correspondante.

Exercice 4 :

Il s'agit maintenant de créer des fonctions d'affichage un peu plus évoluées que de renvoyer une simple liste d'identifiants de livres. Pour cela, on aura besoin d'utiliser les fonctions d'entrées-sorties qui sont rappelées dans l'annexe ci-après.

Remarque : ces derniers affichages s'obtiendront en faisant en sorte que les fonctions renvoient une chaine de caractères contenant toutes les informations que l'on souhaitent afficher.

3. Annexes : quelques éléments sur les entrées-sorties

Lecture

La fonction read permet de saisir des données.
> (read)
Par défaut, elle attend qu'une expression lisp soit tapée au clavier et validée (touche "entrée"). Pour récupérer cette saisie, on pourra par exemple la lier grâce à setq :
> (setq a (read))

Ecriture

Plusieurs procédés peuvent être utilisés pour écrire des données, c'est à dire les afficher à l'écran par défaut.

La fonction print qui, suivie d'un paramètre, permet d'afficher la valeur de ses paramètres.

La fonction format est la fonction la plus générale. Ses paramètres sont :

> (format t "Hello Pierre")
Hello Pierre
;; ~A indique une position à remplir par un des arguments
;; en respectant l'ordre d'apparition
> (format t "~A plus ~A égale ~A" 2 3 5)
2 plus 3 égale 5
;; ~% indique un saut de ligne
> (format t "Bonjour, ~%bonsoir")
Bonjour,
bonsoir

Utilisation pour la manipulation de chaînes de caractères

4. Quelques références