La question sous-jacente:
Que fait le calcul lambda pour nous que nous ne pouvons pas faire avec les propriétés de fonction de base et la notation généralement apprises en algèbre de collège?
Tout d'abord, que signifie l'abstrait dans le contexte du lambda calcul? Ma compréhension du mot abstrait est quelque chose qui est dissocié de la machinerie, le résumé conceptuel d'un concept.
Cependant, les fonctions lambda, en supprimant les noms de fonction, empêchent un certain niveau d'abstraction. Par exemple:
f(x) = x + 2
h(x, y) = x + 5 y
Mais même sans définir le mécanisme de ces fonctions, on peut facilement parler de leur composition. Par exemple:
1. h(x, y) . f(x) . f(x) . h(x, y) or
2. h . f . f . h
Nous pouvons inclure les arguments si nous voulons, ou nous pouvons résumer complètement pour donner un aperçu de ce qui se passe. Et nous pouvons rapidement les réduire à une seule fonction. Regardons la composition 2. Je peux avoir des couches de détails avec lesquelles je peux écrire en fonction de mon accent:
g = h . f . f . h
g(x, y) = h(x, y) . f(x) . f(x) . h(x, y)
g(x, y) = h . f . f . h = x + 10 y + 4
Réalisons ce qui précède avec lambda calcul, ou au moins définissons les fonctions. Je ne suis pas sûr que ce soit vrai, mais je crois que les première et deuxième expressions augmentent de 2.
(λuv.u(u(uv)))(λwyx.y(wyx))x
Et à multiplier par 5 ans.
(λz.y(5z))
Plutôt que d'être abstrait, cela semble entrer dans le mécanisme même de ce que cela signifie d'ajouter, de multiplier, etc. L'abstraction, à mon avis, signifie un niveau supérieur plutôt qu'un niveau inférieur.
De plus, j'ai du mal à voir pourquoi le calcul lambda est même une chose. Quel est l'avantage de
(λuv.u(u(uv)))(λwyx.y(wyx))x
plus de
h(x) = x + 5 y
ou une notation combinée
Hxy.x+5y
ou même la notation de Haskell
h x y = x + 5 * y
Encore une fois, que fait le calcul lambda pour nous que nous ne pouvons pas faire avec les propriétés et la notation de la fonction de style f (x) que beaucoup connaissent.