# Projet interpréteur lisp

[![Qualité](https://forge.univ-artois.fr/sonar67/api/badges/gate?key=root%3A2018%3AMyLisp)](https://forge.univ-artois.fr/sonar67/dashboard/index/root%3A2018%3AMyLisp)
[![Tests réussis](https://forge.univ-artois.fr/sonar67/api/badges/measure?key=root%3A2018%3AMyLisp&metric=test_success_density)](https://forge.univ-artois.fr/sonar67/dashboard/index/root%3A2018%3AMyLisp)
[![Couverture de code](https://forge.univ-artois.fr/sonar67/api/badges/measure?key=root%3A2018%3AMyLisp&metric=coverage)](https://forge.univ-artois.fr/sonar67/dashboard/index/root%3A2018%3AMyLisp)

La page [Lisp sur wikipedia](https://en.wikipedia.org/wiki/Lisp_%28programming_language%29) et la page [Scheme sur wikipedia](https://en.wikipedia.org/wiki/Scheme_%28programming_language%29) fournissent l'historique et les fonctionnalités du langage.

Le comportement de l'interpréteur (le tests) sont validés à l'aide de l'interpréteur [JScheme](http://jscheme.sourceforge.net/jscheme/main.html).

Le nombre de tests augmentera au cours du semestre jusqu'à obtenir un interpréteur pleinement fonctionnelle.

Ce projet est basé sur le travail de [Peter Norvig en Python](http://norvig.com/lispy.html).

Peter Norvig a aussi proposé une version [Java de son interpréteur](http://norvig.com/jscheme.html). Cette version a été conçue à la naissance du langage, et ne peut pas être considérée comme une conception oriénté objet d'un interpréteur Lisp.

Plus récemment, [une version Java a été proposée par Remy Forax](https://forax.github.io/2014-06-01-e733e6af6114eff55149-lispy_in_java.html). 
Si cette solution utilise des concepts avancés et récents de Java (lambdas et streams), le code reste proche de la version python, donc pas vraiment orientée objet.

## Pour déclarer ce projet comme source `upstream`

Il suffit de déclarer une fois ce projet comme dépôt distant de votre fork :

```
$ git remote add upstream https://forge.univ-artois.fr/m1-2018-2019/TDD2019IMPL.git
```

Ensuite, à chaque mise à jour de ce projet, vous pouvez mettre à jour votre fork
à l'aide des commandes suivantes :

```
$ git pull upstream master
$ git push
```

## Si vous ne voyez plus vos tests dans votre projet

Il suffit de rajouter le projet de tests comme un sous module du projet :

```
$ git submodule add https://forge.univ-artois.fr/m1-2018-2019/TDD2019TESTS.git
# remplacer le chemin absolu https://forge.univ-artois.fr/m1-2018-2019/TDD2019TESTS.git 
# par ../../m1-2018-2019/TDD2019TESTS.git dans le fichier `.gitmodules`.
$ git commit -m "Les tests sont de retour"
$ git push
```

