continuations

    0熱度

    1回答

    我希望能夠捕獲延續並多次恢復,這樣每個這樣的調用將獨立於其他調用。 例如,在下面的代碼,我想在run方法2調用context.resumeContinuation以導致輸出:1 1,而不是1 2的電流輸出。 據我所知,結果輸出的原因是我總是使用相同的scope對象,在傳遞給第二個對象之前,第一個連續對象將被修改。因此,我似乎應該恢復原始scope的複製,但Scriptable沒有clone方法(或

    6熱度

    1回答

    我正在做一個項目,需要我寫一個小型的解釋器。這些指令具有簡單的樹形結構,其中一個命令具有暫停執行的效果。所以在下面的例子中,「baz」從不打印。 import Control.Monad.Cont data Instruction = Print String | Halt | Block [Instruction] deriving (Eq, Show) instruction

    0熱度

    1回答

    我有一個應用程序被配置爲捕獲任何在app.config中ThrowUnobservedTaskExceptions enabled =「true」的未觀測任務異常。 我有一個庫類(Class1)需要在它的構造函數中啓動一個異步任務,但是在某些引發異常的場景中,當Class1的實例被丟棄時我進入UnobservedTaskException錯誤(因爲那個任務永遠不會期待已久的)。 我解決了這個問題,

    1熱度

    2回答

    請看一看two-in-a-row*?功能在第19章 我的問題是關於在get-first輔助函數的(leave '())。請注意,(waddle l)將返回'()或原子,這表明列表已用盡或列表中的原子被檢索到。 沒有(leave '())它仍然會返回這兩種值,只是不使用延續leave。但書中說沒有(leave '())是壞的,我只是不明白爲什麼。 ​​3210 非常感謝。 關於這個問題的另一個有趣的

    3熱度

    1回答

    我是still試圖實現2-3根手指樹,我取得了很好的進展(repository)。在做一些基準測試時,我發現當樹很大時,我的基本toList結果爲StackOverflowException。起初,我看到一個簡單的修復,並使其成爲尾遞歸。 不幸的是,事實證明,toList是不是罪魁禍首,但viewr是: /// Return both the right-most element and the

    6熱度

    1回答

    我要去了延續和我遇到兩種不同的方法來構造延續類型: newtype C r a = C {runC :: (a -> r) -> r} exampleFunction :: String -> C Bool String exampleFunction s = C $ \t -> if length s > 10 then t s else False continuationFunct

    0熱度

    2回答

    我有一個很簡單的後續函數(使用簡單起見單子避免): data C a = C {unwrap :: (a -> a) -> a} 本質上講,我試圖執行根據輸入類型不同實施方式中,類似於(須藤代碼)的東西: data Gadt a where AString :: String -> Gadt Bool AInt :: Int -> Gadt Bool data C a

    4熱度

    1回答

    這是展平二叉查找樹的一種方法。它的問題是當它構建的大函數最終應用於[]時,堆棧溢出。我想知道是否有合理的方法修復這段代碼片段而不完全改變它的工作方式。例如,如果構建一個自定義作曲家來構建一個函數樹,然後使用一個顯式堆棧來評估它們(因爲問題已經是將一棵樹展平了),那麼這將無濟於事。 let flatten_k t = let rec f t (k:(list<'a>->list<'a>)

    5熱度

    1回答

    我試圖瞭解下面這個tutorial的延續。 然而,我有困難,瞭解在節2.10以下示例: # let get() = shift (fun k -> fun state -> k state state) ;; get : unit => ’a = <fun> state是int我想類型。我沒有得到的是k的類型。按照我的理解,k捕獲所有計算get()後說到後來,因爲我們正在談論的狀態

    3熱度

    1回答

    在閱讀了幾乎所有關於continuation的內容後,我仍然無法理解它們。也許是因爲所有的解釋都與lambda微積分密切相關,這是我無法理解的。 一般而言,繼續是表示在完成當前事件(即計算的其餘部分)後要執行的操作。 但隨後,它變得棘手,所有變化。也許你們中的一些人可以用我的習慣比喻來幫助我,並指出我在理解中犯了什麼錯誤。 比方說,我們的功能表示爲對象,併爲簡單起見: 我們的翻譯有函數調用堆棧。