0
就拿這張圖的一些算法,在那裏我有什麼,我認爲是「GOTO」的紅箭頭表示: 如何以功能方式表達「goto」?
在維基教科書有關Haskell中,特別是在Continuation Passing Style部分,它說,延續Monad可以用作goto語句,但是我想知道這種方法是否可以擴展到複雜的算法。
說實話,我認爲「goto」是一個反模式,它使我認爲可能有更好的選擇。也許「goto」只是面向對象設計中的反模式?
就拿這張圖的一些算法,在那裏我有什麼,我認爲是「GOTO」的紅箭頭表示: 如何以功能方式表達「goto」?
在維基教科書有關Haskell中,特別是在Continuation Passing Style部分,它說,延續Monad可以用作goto語句,但是我想知道這種方法是否可以擴展到複雜的算法。
說實話,我認爲「goto」是一個反模式,它使我認爲可能有更好的選擇。也許「goto」只是面向對象設計中的反模式?
您可能會發現這些示例與Cont
monad有用。他們主要講解如何在函數式語言定義的跳躍:
https://www.vex.net/~trebla/haskell/cont-monad.xhtml
正如在評論中提到您的問題,goto
有CPS連接和CPS基本上是什麼Cont
單子的。
你發佈的內容不是程序,而是程序的抽象規範(即'僞代碼')。就抽象規範而言,您從來沒有義務將規範翻譯爲代碼 - 您如何實現*任何*特性(在這種情況下,控制流)完全取決於您。此外,即使問題是「我如何將這個僞代碼翻譯成Haskell」,那麼它似乎已經有了答案(「Continuation Monad可以用作goto語句」) - 但是「它是否縮放」完全是基於意見的什麼是「複雜」?什麼是「規模」?)。 – user2407038
就我的觀點(在我看來,身體完全不符合)的名詞性問題而言,我的回答(這也是我的觀點)是 - 轉到函數調用。但是,這並不是說很多 - Haskell是一種*函數* al語言,所以基本上所有東西都可以表示爲一個函數。 – user2407038
如果您包含使用GOTO的_short_(真實)代碼示例(推測以某種命令式語言)並請求使用CPS進行翻譯,則可能會發現此問題將得到更有趣的答案。一般來說,GOTO的問題與CPS的問題與HOF的問題相同 - 控制流程變得非常難以遵循。 – Alec