Un petit interprete lisp

Description

Vu que j'ai mis du temps à le faire et qu'il marche plutôt bien j'ai eu envie de le poster ici...

la compilation marche très bien sur toute les plateformes.
il y a aussi un Makefile pour les parresseux.
---------------
Il y a les principales fonctions pour apprendre les bases du Lisp, et un petit Garbage Collector qui marche bien.
----------------------------------------------------------------------------------------------

--------> la structure de donnée: arbre en listes chainées <-----------

un noeud est un objet, avec un car et un cdr, le car c'est descendre d'un niveau dans l'arbre, et le cdr c'est se déplacer vers la droite.
le car et le cdr sont donc tous les deux fils de l'objet mais dans deux directions différentes.

un objet peut aussi etre un symbole (chaine de caractère), dans ce cas il possède un pointeur vers sa pile de valeurs, une valeur c'est un morceau de l'arbre..
    • et enfin il y a aussi les int, les tableaux, les pointeurs vers fonctions C, et les fonctions Lisp, qui sont également des objets avec respectivement 1, 2, 1 et 2 valeurs attachées.


lisez le code pour mieux comprendre !

Conclusion :


remarque : on évalue d'abord une feuille de l'arbre tout en empilant les pointeurs vers les parents de cette feuille, puis on dépile lentement mais sûrement les pointeurs vers les parents en remplacement le car et le cdr des parents par l'évaluation des feuilles, ainsi les parent deviennent à leur tour des feuilles.

ainsi le ramasse miette devient très simple à écrire puisque tout ce qui n'est pas dans l'arbre ou dans la pile de valeurs d'un symbole ne peut être atteint et donc peut être supprimé

pour tester: tapez tout simplement (somme 4000) le fonction somme (des n premiers entiers) est déja écrite dans fstd.l

ha oui et dernière chose, je l'ai fait à partir d'une ébauche de quelqu'un d'autre trouvée sur Google:
http://www.sonoma.edu/users/l/luvisi/sl3.c

merci à la personne qui l'a fait ça m'a quand même pas mal aidé pour le début

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.