È possibile costruire tutte le caratteristiche del linguaggio funzionale con la sola chiusura?

3

Sto provando a creare un nuovo linguaggio funzionale ed è interprete per la pratica. Come so, la maggior parte degli elementi di base è solo una funzione lambda, ed è solo una chiusura. Non li capisco bene, quindi voglio chiedere se ho ragione o cosa non va?

    
posta Eonil 18.02.2011 - 06:19
fonte

4 risposte

3

Darei un'occhiata a SIOD (Scheme in one Defun) e ad alcune delle versioni più ridotte di schema e lisp. È incredibile quanto sia veramente piccolo lo schema. Hai bisogno di una costruzione di funzioni e di circa 5 forme speciali e hai un interprete Lisp. (Non sarà veloce ma funzionerà)

E naturalmente dai un'occhiata a SICP (Struttura e interpretazione dei programmi per computer) Puoi trovarlo online sul sito web di mitpress.

    
risposta data 18.02.2011 - 07:31
fonte
2

Se vuoi un set di primitive assolutamente minimo, usa calcolo SK , vedi Unlambda lingua.

Altrimenti, un semplice motore di riscrittura dei termini che implementa un calcolo lambda di base sarà sufficiente.

Aggiornamento : ha dimenticato di menzionare - entrambi i modi non introdurranno la chiusura come una primitiva atomica.

    
risposta data 18.02.2011 - 13:23
fonte
1

Nel purissimo lambda calcolo , l'unica cosa che è richiesta per eseguire qualsiasi computazione è la funzione lambda. Alonzo Church ha descritto una possibile codifica dei numeri, con la quale la semplice applicazione di un lambda appositamente formato esegue il lavoro.

Anche in Lisp, l'interezza della lingua può essere costruita da lambda. Il cavallo di battaglia è il combinatore Y (avviso PDF). Con esso, è possibile implementare funzioni ricorsive anonime; nell'ambito del quale è possibile costruire tutti i moduli necessari per implementare il dialetto Lisp più semplice.

Onestamente, è tutto un po 'sopra la mia testa, e sto ancora cercando di girarmi intorno, quindi spero di non averlo macellato orribilmente. :)

    
risposta data 18.02.2011 - 08:14
fonte
0

A quanto ho capito, la chiusura non è assolutamente necessaria. Le chiusure sono convenienti perché "riparano" un ambiente lessicale. Una chiusura inviata come argomento include le sue variabili associate in modo che non debbano essere inviate. Qualsiasi attività che può essere eseguita con una chiusura può essere eseguita senza uno inviando esplicitamente sia la funzione che le variabili come argomenti. Pensa al potere dei combinatori.

Lambdas e chiusura rendono un linguaggio più facile da usare o più espressivo. Basta non dimenticare le funzioni di prima classe nella tua nuova lingua.

    
risposta data 18.02.2011 - 06:50
fonte

Leggi altre domande sui tag