» WIP: TinyLisp, un petit interpréteur de lisp bientôt on-calc.
WIP: TinyLisp, un petit interpréteur de lisp bientôt on-calc.
Posté le 12/10/2024 21:38
>> Dépot git: https://github.com/mibi88/tinylisp <<
Fin septembre j'ai commencé à coder un petit interprétateur de mon propre dialecte de lisp, avec les calculatrices en tête. Mais c'est un peu galère de coder un interprétateur directement pour la calculatrice (sans shell, valgrind, etc.) donc je l'ai codé pour PC déjà et je vais bientôt le porter vers les calculatrices.
Pour l'instant il reste beaucoup à ajouter (surtout des fonctions), je ne suis même pas sur qu'il soit Turing complete (faut vraiment que j'essaye de coder le jeu de la vie avec, qui est Turing complete).
Il y a quelque trucs qui peuvent un peu surprendre: toutes les fonctions où la valeur qu'elles retournent est passé en argument d'une autre fonction sont appelées avant cette fonction, donc il ne faut pas faire
(if (< n 10) (loop (- n 1)) 0), ou loop est appelé avant if, mais
(callif (< n 10) loop (- n 1)), où la fonction callif se chargera d'appeler la fonction si la condition est vraie.
Un petit exemple:
(fncdef factorial (params n))
(* (callif (> n 1) factorial (- n 1)) n)
(defend)
(print (factorial 6))
Affiche
720.000000
J'ai mis plein de tests dans le dépôt
.
Amusez-vous bien !
Citer : Posté le 12/10/2024 21:44 | #
Et pourquoi ne pas utiliser un dialecte déja existant comme Scheme ou clisp ? Même en ne visant qu'une compatibilité partielle
Sinon c'est très cool, j'ai hâte d'avoir un autre langage on calc que le basic crade ou le python
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 12/10/2024 21:45 | #
Et pourquoi ne pas utiliser un dialecte déja existant comme Scheme ou clisp ? Même en ne visant qu'une compatibilité partielle
Parce que là je peux appeler les fonctions dans l'ordre que je veux
Non mais sinon c'est plus fun comme ça.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 13/10/2024 14:44 | #
J'ai ajouté des fonctions pour gérer les listes (test items.lsp).
- (len l): retourne la longueur de la liste l.
- (get l i): retourne l'élément à l'index i (le premier index est 0) de la liste l.
J'ai aussi ajouté des fonctions strlen et strget qui permettent de faire les mêmes opérations sur des chaînes de caractères.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 13/10/2024 21:08 | # | Fichier joint
J'ai codé le jeu de la vie avec: https://github.com/mibi88/tinylisp/blob/master/test/gameoflife.lsp
À la fin il vous affiche le clown normalement
Par contre il est hyper lent (13 secondes pour avoir ce clown), et le code est crade parce qu'il y a des bugs dans l'interpréteur que j'ai dû contourner (faut que je les corrige).
Mais il est donc turing complete !
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 15/10/2024 20:39 | #
L'interpréteur est très très lent actuellement, et j'aime pas trop ma bricole de callif. J'ai aussi du mal à retourner des valeurs. Je suis donc en train de le modifier grandement en générant un AST. J'arrive déjà à créer un arbre, auquel j'ajoute des nœuds et je passe d'un nœud à l'autre.
J'ai pas grand chose à montrer actuellement à part ça (en exécutant simple.lsp).
<- Go to the root node
-> New node
-> New node
<- Go to the parent node
<- Go to the root node
-> New node
-> New node
-> New node
<- Go to the parent node
<- Go to the parent node
<- Go to the root node
-> New node
-> New node
<- Go to the parent node
<- Go to the root node
EDIT:
Il me permettra de n'appeler les fonctions que si besoin.
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html
Citer : Posté le 15/10/2024 21:13 | #
cool cool ! bon courage avec ce projet, et oublie pas getkey ;)
c'est sûrement connu ici avec Lephé qui rode, mais j'avais fait une bonne partie de make a lisp il y a de ça quelques mois, c'est assez dru à lire mais assez complet et leur structure est décente
nb: je link pas forcèment pour ton projet en cours, mais si t'aimes tout ce qui est lié aux langages de prog c'est assez intéressant à faire sur une semaine ou deux
Citer : Posté le 15/10/2024 21:18 | #
Fact : je ne connaissais pas make a lisp
Citer : Posté le 15/10/2024 21:25 | #
Pareil, je ne connaissais pas. Impressionnant le nombre d'implémentations. Mais bon, je vais pas trop regarder comment ils ont fait pour faire mon interpréteur entièrement à ma façon (c'est plus intéressant que de recopier le truc de quelqu'un d'autre).
libMicrofx : https://www.planet-casio.com/Fr/forums/topic17259-2-libmicrofx-remplacez-fxlib-pour-faire-des-add-ins-tres-legers.html !
Racer3D : https://www.planet-casio.com/Fr/programmes/programme4444-1-racer3d-mb88-jeux-add-ins.html