Domanda

Recentemente ho iniziato casualmente leggendo nella logica combinatoria, e ho notato che una funzione di ordine superiore che ho regolarmente usare è un combinatore. Questo combinatore è in realtà piuttosto utile (lo si può utilizzare per definire Inoltre sulle equazioni polinomiali, per esempio), ma non ho mai dato un nome decente. Qualcuno riconosce questo combinatore? (Ignorando le differenze nella funzione accattivarsi)

unknown = function (h, f, g)
    function (x) h( f(x), g(x) )
}

In lambda calcolo, l'esecuzione completamente al curry sarebbe $ \ Lambda h. \ Lambda f. \ Lambda g. \ Lambda x. h (f x) (g x) $. In altre parole, se $ M $ è questo mistero combinatore, allora la sua equazione che definisce è $ M \, h \, f \, g \, x = h \, (f \, x) \, (g \, x) $.

Se sono necessarie ulteriori informazioni, o la mia domanda è carente informazioni chiave si prega di lasciare un commento e mi permetterà di modificare la mia domanda.

È stato utile?

Soluzione

Questo probabilmente non è un nome standard, ma in L'attuazione della programmazione funzionale Lingue nella Sezione 16.2.4 Simon Peyton Jones chiama S'. Essa è definita come un combinatore di ottimizzazione

S (B x y) z = S' x y z

L'esempio seguente è dalla sezione menzionata. Considerare

λx_n...λx_1.PQ

dove P e Q sono complicate espressione che uso sia tutte le variabili. Eliminando astrazioni lambda porta ad quadratica aumento di dimensioni termine n:

P Q
S P1 Q1
S (B S P2) Q2
S (B S (B (B S) P3)) Q3
S (B S (B (B S) (B (B (B S)) P4))) Q4

ecc., Dove Pi e Qi sono alcuni termini. Con l'aiuto di questo S' ottiene solo lineare:

P Q
S P1 Q1
S' S P2 Q2
S (S' S) P3 Q3
S (S' (S' S)) P4 Q4
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top