में निम्नलिखित निरंतरता इकाई का उपयोग करना:StackOverflow निरंतरता इकाई
type ContinuationMonad() =
member this.Bind (m, f) = fun c -> m (fun a -> f a c)
member this.Return x = fun k -> k x
let cont = ContinuationMonad()
मैं देखना क्यों निम्नलिखित मुझे एक ढेर अतिप्रवाह देता है असफल: एक ओर जहां निम्नलिखित
let map f xs =
let rec map xs =
cont {
match xs with
| [] -> return []
| x :: xs ->
let! xs = map xs
return f x :: xs
}
map xs id;;
let q = [1..100000] |> map ((+) 1)
नहीं करता है:
let map f xs =
let rec map xs =
cont {
match xs with
| [] -> return []
| x :: xs ->
let! v = fun g -> g(f x)
let! xs = map xs
return v :: xs
}
map xs id;;
let q = [1..100000] |> map ((+) 1)
ध्यान दें कि मैं वी.एस. 2012 आर सी पर हूँ अगर कोई परीक्षण कर सकते हैं यह है वीएस -2010 की वर्तमान रिलीज पर वही व्यवहार। –
हां, और यह ओकैमल में भी वही व्यवहार है। नीचे मेरा जवाब देखें। – t0yv0
एफडब्ल्यूआईडब्ल्यू, यह व्यवहार अभी भी वीएस2015, एफ # 4.0, अपडेट 3 के साथ देखा जा सकता है (हालांकि उत्तरों का संकेत है कि इसे कंपाइलर पर दोष नहीं दिया जा सकता है)। – Abel