Si vous voulez que Lisp ressemble à Ruby, utilisez Ruby.
Il est possible d'utiliser Ruby (et Python) d'une manière très lisp, ce qui est l'une des principales raisons pour lesquelles ils ont été acceptés si rapidement.
J'ai beaucoup lu que LISP peut redéfinir la syntaxe à la volée, probablement avec des macros. Je suis curieux de savoir jusqu'où cela va-t-il réellement? Pouvez-vous redéfinir la structure du langage au point qu'il devienne limite un compilateur pour un autre langage ? Par exemple, pourriez-vous changer la nature fonctionnelle de LISP en une syntaxe et une sémantique plus orientées objet, par exemple avoir une syntaxe plus proche de quelque chose comme Ruby ?
En particulier, est-il possible de se débarrasser de l'enfer des parenthèses à l'aide de macros ? J'ai suffisamment appris (Emacs-)LISP pour personnaliser Emacs avec mes propres micro-fonctionnalités, mais je suis très curieux de savoir jusqu'où les macros peuvent aller dans la personnalisation du langage.
Si vous voulez que Lisp ressemble à Ruby, utilisez Ruby.
Il est possible d'utiliser Ruby (et Python) d'une manière très lisp, ce qui est l'une des principales raisons pour lesquelles ils ont été acceptés si rapidement.
@étincelles
Parfois, LISP est le choix de langage clair, à savoir les extensions Emacs. Je suis sûr que je pourrais utiliser Ruby pour étendre Emacs si je le voulais, mais Emacs a été conçu pour être étendu avec LISP, il semble donc logique de l'utiliser dans cette situation.
C'est une question délicate. Étant donné que lisp est déjà structurellement si proche d'un arbre d'analyse, la différence entre un grand nombre de macros et l'implémentation de votre propre mini-langage dans un générateur d'analyseur n'est pas très claire. Mais, à l'exception des parenthèses d'ouverture et de fermeture, vous pourriez très facilement vous retrouver avec quelque chose qui ne ressemble en rien au lisp.
L'enfer des parenthèses ? Je ne vois plus de parenthèse dans :
(function toto)
que dans :
function(toto);
Et dans
(if tata (toto)
(titi)
(tutu))
pas plus que dans :
if (tata)
toto();
else
{
titi();
tutu();
}
Je vois moins de parenthèses et ';' cependant.