mcoolive a écrit 3 commentaires

  • # Lisp est eXtensible

    Posté par  . En réponse au journal Lisp: pourquoi est-ce different ?. Évalué à 2.

    Presque tout a été dit sur Lisp ici, et le message de Sylvain Sauvage me semble bien résumer tout cela.
    Mais, pour répondre à la question initiale de Pierre Maziere, je pense qu'il faut revenir un peu sur une qualité qui a été peu expliqué : l'extensibilité du langage Lisp.

    (1) Lisp est un langage vieux. Ces concepts ont été repris dans de nombreux autres langages... OK !

    (2) Lisp est un langage fonctionnel impur (effets de bord possibles). Penser fonctionnel est souvent (pas toujours) plus simple pour concevoir des applications complexes ou pour écrire un algorithme. Le Common Lisp Object System, souvent abrégé en CLOS, apporte aussi le paradigme objet (moi je préfère OCaml, question de goûts)... OK !

    (3) Lisp est un langage réflexif et extensible !!! Ce concept a été repris, évidement, dans plusieurs langages, et a même inspiré un nouveau paradigme de programmation : « la programmation intuitive ».
    Ce dernier point mérite d'être bien expliqué. Il a déjà été abordé précédement :
    Lot of Insipd and Stupid Parenthesis

    La syntaxe des expressions en notation préfixe

    L'un des grands avantages du Lisp c'est qu'il permet de manipuler des symboles... (+ exemples)


    Les mots clefs sont des symboles comme les autres
    La simplicité de la syntaxe de Lisp fait qu'il est très facile et très rapide d'écrire un parser Lisp. Il n'y a pas de règle « spéciale » pour les mots clefs du langage.

    Exemple :

    (if cond list1 list2) équivalent à (maFonction param1 param2 param3).


    Le système de macro du Lisp est très puissant.
    Les macros du C sont un « simple » remplacement de chaînes de caractères effectué par un préprocesseur, donc avant la compilation.
    Une macro Common Lisp est une fonction dont l'objectif n'est pas d'effectuer un calcul à l'exécution, mais de transformer une expression Common Lisp en une autre expression Common Lisp à la compilation ou au chargement. Les macros Lisp sont un remplacement effectué sur l'AST (Arbre de Syntaxe Abstraite) du programme.

    C'est beaucoup plus souple, on peut par exemple examiner le nombre de paramètre pour lever une erreur de compilation ou bien effectuer un remplacement différent en fonction de la valeur d'un paramètre en l'évaluant pendant pendant la compilation et non pendant l'exécution... Je vous laisse imaginer.

    Exemple, définition d'un mot clef while :

    (defmacro while (test &body body)
    `(do ()
    ((not ,test))
    ,@body))


    Conclusion 1 :
    Ces deux qualités associées à celles précités par Sylvain Sauvage permettent de changer facilement la sémantique des mots clefs du langage Lisp, et d'en inventer de nouveau.
    Évidemment, cela plait à la communauté « intelligence artificielle ».

    Conclusion 2 :
    http://en.wikipedia.org/wiki/Domain-specific_language(...)
    Lisp permet de créer un DSL (Domain Specific Langage) !
    ---> simplicité, efficacité
  • [^] # Re: Réponses

    Posté par  . En réponse au journal Lisp: pourquoi est-ce different ?. Évalué à 2.


    Réponse rapide: rien, tous les langages "turing-complets" sont équivalents.


    Petite correction pour les tatillons.
    Tous les langages de programmations bien fichus sont tuning-complets (cad tous en fait).
    Mais tous les langages ne sont pas tuning-complets. Exemple : j'invente un langage avec une unique instruction qui permet de « rien faire ».

    Conclusion : on choisit un langage de programmation non pas pour ce qu'il permet de faire mais pour tout plein d'autres raisons parmi lesquelles :
    - la facilité / rapidité de conception et de mise en oeuvre,
    - l'absence de bug,
    - l'efficacité du code compilé,
    - la portabilité du code, la pérénnité de l'architecture,
    - faire plaisir à son chef, au client,
    - etc, etc, etc
  • [^] # Re: Symboles et mémoire !

    Posté par  . En réponse au journal Lisp: pourquoi est-ce different ?. Évalué à 1.

    Je pense que le mot « interprété » est très mal choisi ! Si tu veux parler de calcul symbolique et de gestion automatique de la mémoire, il est plus correct de parler de virtualisation ou de machine virtuelle.

    À part cela, je suis d'accord avec tous ces arguments. Il manque juste une dernière qualité : le langage Lisp est un langage extensible (cf. le post plus bas) !