फोल्डिंग समाप्त गैर हमें एक अन्यथा को तोड़ते पर विचार करें:अनुवाद योजना कॉल/सीसी हास्केल callCC को
(call/cc (lambda (folded)
(stream-fold
(lambda (acc v)
(if (< v 5)
(cons v acc)
(folded acc)))
'()
(in-naturals 0))))
; returns '(4 3 2 1 0)
ऊपर कोड की हास्केल बराबर होगा
callCC $ \folded -> foldl (\acc v -> if v < 5 then v:acc else folded acc) [] [0..]
इस कोड को करता है अभिव्यक्त संकलन में एक अनंत प्रकार का निर्माण करने में असमर्थ होने के बारे में संकलित और शिकायत नहीं करते हैं। मुझे पहले से ही एक विचार है कि वाई संयोजक जैसे मामलों में इस तरह की त्रुटि को कैसे खत्म किया जाए, लेकिन वही दृष्टिकोण यहां काम नहीं कर रहा है। इस तरह की स्थिति के लिए सही दृष्टिकोण क्या है?
'foldl' के बजाय' foldM' का उपयोग करें। यहां आपके पास यह है कि 'v: acc' और' folded acc 'एक ही प्रकार को वापस नहीं करते हैं। –