2011-01-14 9 views
5

Per apprendere cos'è un combinatore a virgola fissa e viene utilizzato per, ho scritto il mio. Ma invece di scrivere con funzioni strettamente anonime, come Wikipedia's example, ho appena usato definisco:Combinatore Y in Schema utilizzando Definisci

(define combine (lambda (functional) 
        (functional (lambda args (apply (combine functional) args)))) 

Ho provato questo con funzionali per fattoriale e Fibonacci, e sembra funzionare. Questo soddisfa la definizione formale di un combinatore a virgola fissa?

+0

Esercizio 2: combinatore Y senza usare 'define' o' letrec' :) – leppie

risposta

3

La risposta è no, perché secondo the blog referred to in the previous answer, non soddisfa nemmeno la definizione di combinatore, dal momento che 'combinare' è un libero variabile.

+2

Grazie per averlo indicato. Giusto per essere sicuro che la definizione del blog sia corretta, la consideri equivalente alla definizione di Wikipedia: "Un combinatore è una funzione di ordine superiore che utilizza solo l'applicazione di funzione e i combinatori definiti in precedenza per definire un risultato dai suoi argomenti."? Vedi http://en.wikipedia.org/wiki/Combinatory_logic – AlcubierreDrive

5

MODIFICA: Mentre chessweb o qualcun altro conferma la sua risposta, considera temporaneamente la sua risposta corretta e questa errata.


Sembra che la risposta sia sì. A quanto pare la stessa identica combinatore appare here, a metà strada in basso nella pagina:

(define Y 
    (lambda (f) 
     (f (lambda (x) ((Y f) x))))) 
+0

Non si dovrebbe. Sei incoraggiato a rispondere alle tue stesse domande. IIRC puoi accettare la tua risposta in 2 giorni dopo averlo dato. –

+0

@Yasir Grande, grazie! – AlcubierreDrive

+1

Il punto principale dell'insegnamento del combinatore Y è vedere come è possibile * implementare * la ricorsione con le sole funzioni. Scrivendo una definizione ricorsiva, non si riesce a farlo, quindi si finisce con qualcosa che funziona, ma è utile solo per capire cosa si suppone debba fare Y. Il testo di Mike sarebbe un buon posto per leggerlo a fondo e vedere come viene derivata la versione 'define'-less. –