Listes fonctionnelles (SList.java et TestSList.java)

Lorsque des objets sont amenés à être partagés, il est intéressant d'en avoir une implémentation fonctionnelle. Dans le cas d'une implémentation fonctionnelle, les effets de bord sont interdits. On ne fait que créer de nouveaux objets, modification éventuelle d'un objet déja existant. Par exemple, si l'on suppose que la classe Liste utilisée ci-dessous est implémentée dans un style fonctionnel, et que la liste l1 contient les objets a, b et c, on devra avoir à la fin des instructions
Liste l2 = l1;
l1 = l1.ajouter(d);
une liste l1 contenant a, b, c et d et une liste l2 contenant a, b et c : la modification de l1 n'a pas affecté l2.
Ce type de liste est utilisé par exemple dans les langages symboliques comme Lisp ou Scheme.
En Scheme : La classe SList implémente une structure de liste comparable à celle fournie par Scheme.
Notons que :