Question

J'ai récemment appris un peu sur le calcul Lambda, à partir de la brève intro du texte Langage de programmation Pragmatics et Cette séquence de 4-vidéo exceptionnelle d'Adam Doupé. Fondamentalement, j'ai appris l'essentiel du calcul de lambda, de la conversion $ alpha $ et de la réduction $ beta $, un peu de chiffres d'église, d'addition / soustraction et du combinateur $ y $.

En cela, j'ai appris le concept d'un combinateur, c'est-à-dire qu'il s'agit d'une abstraction sans variables libres. Concept simple. Et il semblait y avoir cette idée que je n'arrêtais pas de lire entre les lignes, que nous pouvons / devons transformer des abstractions non combinantes en combinateurs en les enveloppant dans des abstractions qui lient les variables libres. Par exemple, nous pouvons prendre l'abstraction $ ( lambda x. Xy) $ et l'envelopper dans $ ( lambda y. Lambda x. Xy) $ pour lier le $ y $.

Mais il n'a jamais été vraiment expliqué Pourquoi Il est important ou utile de préférer les combinateurs.

je suis en supposant C'est parce que les combinateurs nous permettent de combiner facilement les expressions (surprise surprise) sans avoir besoin de variables appropriées externes. En d'autres termes, nous pourrions évaluer une série de demandes de combinator de longueur arbitraire sans avoir à fournir de conditions initiales à l'avance. Ce qui pour moi ressemble à l'équivalent de la programmation d'éviter les variables globales afin d'éviter de rechercher des valeurs en dehors de la portée actuelle, afin de faciliter la compréhension du programme et la réduction des erreurs. Il semble également s'aligner sur l'idée d'un langage "fonctionnel pur" qui n'a pas de variables et aucun effet secondaire, ce qui implique qu'un tel langage est effectivement une série d'applications combinatrices.

Est-ce exact?

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top