- I fix-point combinators sono strumenti molto utili per introdurre la ricorsione.
- Lo Continuation-Passing style è uno stile di lambda calcolo in cui le funzioni non ritornano mai. Invece passi il resto del tuo programma come argomento lambda nella tua funzione e prosegui attraverso di essi. Ti permette di avere un controllo migliore sul flusso di esecuzione e più facilmente definire vari costrutti che alterano il flusso (loop, coroutine, ecc ...)
Tuttavia, mi chiedo se è possibile esprimere uno in un altro? Tutti i linguaggi in stile CPS che ho visto hanno un costrutto esplicito FIX
per definire la ricorsione.Definire il combinatore di punti fissi in Continuation Passing Style
- È perché è impossibile definire un combinatore di punto di correzione (o simile) in CPS semplice, senza
FIX
? Se è così, conosci la prova di una cosa del genere? - Oppure a causa di problemi di digitazione?
- O forse è possibile, ma per qualche motivo non pratico?
- O semplicemente non ho trovato una soluzione che è là fuori ...?
ci si aspetterebbe un Y-combinatore come funzione CPS CPSY
a lavorare come questo: Se definisco una funzione CPS Y-ready, come ad esempio:
function Yready(this, return) =
return (lambda <args> . <body using 'this' as recursion>);
avrei poi messo in CPSY
per produrre una funzione che recurses in sé:
function CPSY(F, return) = ?????
CPSY(Yready,
lambda rec . <body where 'rec' names 'lambda <args>' from above, but with the loop closed>
)
Il CPSY
dovrebbe essere una funzione semplice stile continuazione-passing senza prendere affidamento su qualsiasi rec ursion. Il combinatore Y può essere definito in modo simile al calcolo lambda senza ricorsione incorporata. Può esistere, in qualche modo, anche in CPS?
Per ribadire un chiarimento: Sto cercando una funzione combinatore simile CPSY
che:
- consentirebbe ricorsione di funzioni di CPS
- La definizione di esso non si basa su ricorsione
- La definizione di esso è data in stile passaggio continuo (nessun ritorno lambda in qualsiasi parte all'interno del corpo di
CPSY
)
"...IOW, senza usare 'letrec' in nessuna forma, solo' let' (in termini Scheme). "Credo che sia quello che intendi. Interessante domanda ... –