Présentation

SLED (Schemy Lisp en DOS) est un interprète Lisp purement symbolique, dérivé de Kilo LISP et limité aux constructions de Scheme. Il s’exécute sur des environnements DOS natifs (FreeDOS, MS‑DOS) ou sur des émulateurs tels que DOSBox. Le programme charge automatiquement le fichier sled.scm au démarrage, ce qui constitue la bibliothèque standard du langage.

Architecture des données

Le système ne possède que deux types fondamentaux : les paires et les atomes. Les atomes se déclinent en trois variantes : symboles, fermetures (fonctions) et symboles spéciaux comme nil. Un symbole accepte jusqu’à 16 caractères parmi les lettres minuscules, les chiffres et les caractères « - . ? _ ». Le point (« . ») ne peut pas être en première position. Tout caractère ASCII imprimable peut être inclus s’il est précédé d’un antislash, à l’exception de « ( », « ) », « ' » et « $ ». Exemple :

\This\ is\ a\ sym\!

Les lettres majuscules sont converties en minuscules sauf si elles sont échappées. Les paires sont immuables ; chaque paire possède un head et un tail qui peuvent être des atomes ou d’autres paires. La création d’une paire se fait soit par la notation pointée, soit via la fonction builtin cons :

(cons 'a 'x)

Les listes sont des chaînes de paires terminées par nil. Les listes impropres, où le dernier tail n’est pas nil, sont également supportées, comme dans (a . (b . (c . d))). SLED ne propose aucun type numérique natif ; les nombres naturels sont simulés par des listes de comptage (von Neumann), par exemple '() pour zéro, '(nil) pour un, etc.

Évaluation, fonctions et optimisation

L’évaluation suit la sémantique Lisp classique : le premier élément d’une liste non citée est évalué comme fonction, les arguments sont évalués avant l’appel (évaluation eager). Les fonctions sont des fermetures créées par lambda et liées à un environnement via define. Exemple de fonction simple :

(define fun (lambda (arg1 arg2) (print arg1) (print arg2)))

Les arguments peuvent être capturés sous forme de liste ((lambda x ...)) ou déstructurés ((lambda (x y) ...)). SLED intègre deux mécanismes pour limiter la profondeur de la pile : un évaluateur trampoline et l’optimisation des appels en queue (TCO). La TCO s’applique aux formes lambda, let, begin, if, ifnil, apply et, de façon particulière, à cons lorsque la récursion se situe dans le second argument.

Limitations et portabilité

Les symboles spéciaux, les formes spéciales et les fonctions builtin sont immuables et ne peuvent être masqués. Le système ne propose pas de gestion d’exceptions : toute erreur interrompt l’évaluation et renvoie au prompt principal, sans possibilité de capture locale. Le respect du format de nom de fichier DOS 8.3 (max 8 caractères + extension de 3 caractères) est obligatoire, bien que l’interpréteur n’impose pas l’extension .scm. Enfin, l’absence de types numériques et la dépendance à un environnement DOS limitent l’usage de SLED aux projets éducatifs ou aux démonstrations de concepts Lisp dans des contextes très contraints.