Trasformazione del passaggio di continuazione delle funzioni binarie


13

Richiama la trasformazione del passaggio di continuazione (trasformazione CPS) che porta da a (dove è fisso) e a definito da In effetti abbiamo la monade di continuazione con l'unità definita da e la moltiplicazione definita da β A : = R R A R f : A B β f : β A β B βAβA:=RRARf:ABβf:βAβB

βfκr:=κ(rf).
η A x : = λ r . rηA:AβAμ A : β ( β A ) β A μ A
ηAx:=λr.rx
μA:β(βA)βA
μAKr:=K(λf.fr).

Ora pensiamo a come possiamo trasformare un binario mappa , vale a dire, vogliamo . Uno si presenta rapidamente con Questo ha senso anche dal punto di vista della programmazione.f:ABCγf:βAβBβC

γfκνr:=κ(λx.β(fx)νr).

Ecco la mia domanda: c'è un motivo più profondo per γ , oltre al fatto che sembra giusto dal punto di vista della programmazione? Ad esempio, esiste una ragione teorica di categoria o altra ragione "teorica" ​​per pensare che γ abbia senso? Ad esempio, possiamo cucinare γ dalla monade in modo sistematico?

Sto cercando una panoramica CPS trasformate di funzioni ario.n


2
Stai cercando qualcosa al di là di Haskell liftM2o generalizzazioni a Applicative? Puoi derivare una versione n-ary di ciò che descrivi (in un linguaggio che ti permette di parlare delle funzioni polimorfiche di n-ary) direttamente dalla struttura applicativa di continuazione.
copumpkin,

1
So come scrivere queste generalizzazioni, voglio sapere perché sono così. I teorici di categoria capiranno cosa sto chiedendo.
Andrej Bauer,

1
Hmm, grazie per averlo sottolineato Applicative. Ha liftA2qual è il mio , vedi hackage.haskell.org/packages/archive/base/4.2.0.0/doc/html/…γ
Andrej Bauer,

3
Sì, liftA2faceva parte di ciò che stavo suggerendo. La nozione di "parentesi idioma" (che si (| f x y z ... |)traduce in pure f <*> x <*> y <*> z <*> ...) Applicativesembra il modo sistematico per ottenere la forma n-ary della tua domanda. Conosco la CT, ma mi è sembrato più semplice parlarne in termini di programmazione standard. Se non ti sei mai imbattuto in Applicativeprecedenza, potresti voler esaminare i lassisti funzioni monoidali (anche se la sua affermazione di Haskell con <*>implicazioni esponenziali). Comunque, non ho una risposta per te, ma stavo cercando di capire meglio cosa stavi ottenendo :)
copumpkin,

2
La tesi di dottorato di Hayo Thielecke riguarda la struttura categorica del CPS. Forse la risposta sta lì o nelle sue altre pubblicazioni. cs.bham.ac.uk/~hxt/research/hayo-thielecke-publications.shtml
Dave Clarke,

Risposte:


7

~~ A * ~~ B | - ~~ (A * B)

¬¬A¬¬B¬¬(AB)

κϵ


4

Aumentando la risposta di Noam:

f:ABCuncurry(f):A×BCTdblstr:TA×TBT(A×B)

TA×TBdblstrT(A×B)uncurry(f)TC

Se istanziamo questo sulla monade della continuazione, otteniamo la tua costruzione.

n

πnπstrπ:TA1××TAnT(A1××An)nf:A1××AnCγf:TA1××TAnstrπT(A1××An)TfTC

Ma ancora non penso che questo ti dia davvero la risposta che stai cercando ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.