Sto cercando di capire come funzionano le continuazioni, ho questo esempio che ho trovato nel libro, Programmazione funzionale del mondo reale di Tomas Petricek con Jon Skeet. Ma questo in realtà ha ottenuto la mia testa gira quindi devo chiedere qualche aiuto dettagliata ..Elaborazione di un albero in F # usando le continuazioni
type IntTree =
| Leaf of int
| Node of IntTree * IntTree
let rec sumTreeCont tree cont =
match tree with
| Leaf(n) -> cont(n)
| Node(left, right) ->
sumTreeCont left (fun leftSum ->
sumTreeCont right (fun rightSum ->
cont(leftSum + rightSum)))
Ok ecco quello che sono stato in grado di capire me stesso ... Nel secondo ramo abbiamo prima di elaborare il lato sinistro il nodo e passare un lambda. Questo lambda creerà un'istanza di una classe di chiusura con due campi, right: IntTree
e cont: (int -> 'a)
che verrà invocato dal caso base. Ma poi sembra anche che il "inner lambda" catturi lo leftSum
ma non capisco bene come tutto si combini, devo ammettere che mi viene un po 'di vertigini quando cerco di capirlo.
Consiglio vivamente la lettura della serie di Brian McNamara blog sul catamorphisms (che include continuazioni) https://lorgonblog.wordpress.com/?s=catamorphism –