La domanda di fondo:
Cosa fa per noi il calcolo lambda che non possiamo fare con le proprietà della funzione di base e la notazione generalmente apprese dall'algebra della scuola media?
Prima di tutto, cosa significa astratto nel contesto del calcolo lambda? La mia comprensione della parola astratto è qualcosa che è separato dal macchinario, il riassunto concettuale di un concetto.
Tuttavia, le funzioni lambda, eliminando i nomi delle funzioni, impediscono un certo livello di astrazione. Per esempio:
f(x) = x + 2
h(x, y) = x + 5 y
Ma anche senza definire il meccanismo di queste funzioni, possiamo facilmente parlare della loro composizione. Per esempio:
1. h(x, y) . f(x) . f(x) . h(x, y) or
2. h . f . f . h
Possiamo includere gli argomenti se vogliamo, oppure possiamo astrarre completamente per dare una visione d'insieme di ciò che sta accadendo. E possiamo ridurli rapidamente a una singola funzione. Diamo un'occhiata alla composizione 2. Posso avere livelli di dettaglio degli studenti con cui posso scrivere a seconda della mia enfasi:
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
Eseguiamo quanto sopra con il calcolo lambda, o almeno definiamo le funzioni. Non sono sicuro che sia giusto, ma credo che la prima e la seconda espressione aumentino di 2.
(λuv.u(u(uv)))(λwyx.y(wyx))x
E da moltiplicare per 5y.
(λz.y(5z))
Piuttosto che essere astratto, questo sembra entrare nel meccanismo stesso di ciò che significa aggiungere, moltiplicare, ecc. L'astrazione, nella mia mente, significa livello superiore piuttosto che livello inferiore.
Inoltre, faccio fatica a capire perché il calcolo lambda sia persino una cosa. Qual è il vantaggio di
(λuv.u(u(uv)))(λwyx.y(wyx))x
al di sopra di
h(x) = x + 5 y
o una notazione combinata
Hxy.x+5y
o persino la notazione di Haskell
h x y = x + 5 * y
Ancora una volta, cosa fa per noi il calcolo lambda che non possiamo fare con le proprietà e la notazione della funzione stile f (x) che molti hanno familiarità.