Barry Jay dans son livre fait des affirmations audacieuses - essentiellement en disant que, au cœur d'un programme, tout est atomique ou composé. Ensuite, les choses peuvent être facilement itérées, filtrées, mises à jour, simplement en parcourant cette relation de composition.
Est-ce une nouvelle frontière en informatique pour les langages informatiques - ou revenons-nous simplement au LISP?
fl.formal-languages
oeil de faucon
la source
la source
Réponses:
L'un des principaux avantages des travaux récents de Jay est qu'il réduit le code passe-partout dont on a besoin pour écrire afin de parcourir les structures de données pour effectuer des opérations telles que la carte . Le calcul de modèle permet d'écrire une fois le code de parcours pour toutes les structures de données et de l'appliquer à votre propre structure de données. Cela réduit certainement la quantité de code requise, mais ne vous permet pas d'écrire des programmes que vous ne pourriez pas autrement écrire. Certes, il y a beaucoup d'idées intéressantes dans le travail, mais il reste à démontrer qu'il fonctionne réellement.
la source
Je ne connais pas le travail récent de Barry Jay, mais son ancien travail comprend des choses que vous ne pouvez pas faire en Lisp, car les types donnent des informations supplémentaires.
Par exemple, supposons que vous souhaitiez définir la taille d'une structure de données Lisp. C'est 1 pour un atome, et n pour une liste de n atomes, et plus généralement taille (x) + taille (y) pour
(cons x y)
.Maintenant, ajoutez des types dans le mélange. La taille d'une liste serait sa longueur. Maintenant, quelle est la taille d'une liste de listes d'atomes? Si vous considérez cette structure de données comme une liste (dont les éléments se trouvent être des listes d'atomes), la réponse est la longueur de la liste. Si vous considérez cette structure de données comme contenant des atomes qui se trouvent être stockés dans une liste de listes, la réponse est la somme des longueurs des listes d'éléments.
Les types vous permettent de distinguer ces deux vues (formes) des données brutes. Vous avez besoin d'un système de type qui vous permet de faire la distinction entre (Liste) (Liste Atom) et (Liste Liste) (Atom). L'implémentation la plus courante de cette distinction concerne les classes de type (comme dans Haskell).
la source