Il combinatore a virgola fissa FIX (noto anche come il combinatore Y) nel calcolo lambda (non tipizzato) ( ) è definito come:
FIX
Capisco il suo scopo e posso tracciare perfettamente l'esecuzione della sua applicazione; Vorrei capire come derivare FIX dai primi principi .
Ecco quanto ottengo quando provo a derivarlo da solo:
- FIX è una funzione: FIX
- FIX accetta un'altra funzione, , per renderlo ricorsivo: FIX
- Il primo argomento della funzione è il "nome" della funzione, utilizzato dove è prevista un'applicazione ricorsiva. Pertanto, tutte le apparenze del primo argomento in dovrebbero essere sostituite da una funzione e questa funzione dovrebbe aspettarsi il resto degli argomenti di (supponiamo che prenda un argomento): FIX
È qui che non so come "fare un passo" nel mio ragionamento. Le piccole ellissi indicano dove manca il mio FIX (anche se sono in grado di saperlo solo confrontandolo con il FIX "reale").
Ho già letto Tipi e linguaggi di programmazione , che non tenta di derivarlo direttamente, ma rimanda invece il lettore a The Little Schemer per una derivazione. Ho letto anche quello e la sua "derivazione" non è stata così utile. Inoltre, è meno una derivazione diretta e più un uso di un esempio molto specifico e un tentativo ad hoc di scrivere una funzione ricorsiva adatta in .