En tant que programmeur Lisp vous apprendre à penser d'un programme comme source de données. Il n'est plus un texte statique, mais les données. Dans certaines formes de Lisp le programme lui-même, c'est que la structure de données, qui est exécuté.
Ensuite, tous les outils sont orientés de cette façon. Au lieu d'un texte macro processeur Lisp a un système de macro qui fonctionne sur les programmes en tant que données. La transformation de programmes et de texte a aussi ses outils.
Nous allons réfléchir à l'ajout de deux éléments d'un vecteur:
(let ((v (vector 1 2 3)))
(+ (aref v 0)
(aref v 1)))
Il n'y a rien d'inhabituel à ce sujet. Vous pouvez compiler et l'exécuter.
Mais vous pouvez aussi faire ceci:
(let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1)))
Renvoie une liste avec un symbole plus et deux sous-listes. Ces sous-listes ont le symbole de l'aref, puis le tableau de la valeur de v et la valeur de l'indice.
Cela signifie que la construction du programme contient en fait des symboles, mais aussi de données. Le tableau est vraiment une partie de la sous-listes. De sorte que vous pouvez construire des programmes, et ces programmes sont données, et peuvent contenir des données arbitraires.
EVAL évalue ensuite le programme en tant que données.
CL-USER 17 > (setf *print-circle* t)
=> T
Ci-dessus nous indique que l'imprimante doit imprimer circulaire structures de données telles que les identités sont conservés lors de la lecture en arrière.
CL-USER 18 > (let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1)))
=> (+ (AREF #1=#(1 2 3) 0) (AREF #1# 1))
Maintenant, nous allons eval de données comme un programme Lisp:
CL-USER 19 > (EVAL (let ((v (vector 1 2 3)))
(list '+
(list 'aref v 0)
(list 'aref v 1))))
=> 3
Si votre compilateur s'attend à ce texte comme source de on peut construire ces textes, mais ils ne peuvent pas référence directement les données. Pour ces texte en fonction de la source de la construction de nombreux outils ont été développés, mais beaucoup de de ces ont tendance à travailler dans les stades. En Lisp de la fonctionnalité de la manipulation de données peuvent être appliquées directement à manipuler des programmes et cette fonctionnalité est directement intégré et d'une partie du processus d'évaluation.
Donc Lisp vous donne un degré supplémentaire de liberté et de nouvelles façons de penser.