2017-02-24 18 views
0

就拿這張圖的一些算法,在那裏我有什麼,我認爲是「GOTO」的紅箭頭表示: enter image description here如何以功能方式表達「goto」?

在維基教科書有關Haskell中,特別是在Continuation Passing Style部分,它說,延續Monad可以用作goto語句,但是我想知道這種方法是否可以擴展到複雜的算法。

說實話,我認爲「goto」是一個反模式,它使我認爲可能有更好的選擇。也許「goto」只是面向對象設計中的反模式?

+7

你發佈的內容不是程序,而是程序的抽象規範(即'僞代碼')。就抽象規範而言,您從來沒有義務將規範翻譯爲代碼 - 您如何實現*任何*特性(在這種情況下,控制流)完全取決於您。此外,即使問題是「我如何將這個僞代碼翻譯成Haskell」,那麼它似乎已經有了答案(「Continuation Monad可以用作goto語句」) - 但是「它是否縮放」完全是基於意見的什麼是「複雜」?什麼是「規模」?)。 – user2407038

+0

就我的觀點(在我看來,身體完全不符合)的名詞性問題而言,我的回答(這也是我的觀點)是 - 轉到函數調用。但是,這並不是說很多 - Haskell是一種*函數* al語言,所以基本上所有東西都可以表示爲一個函數。 – user2407038

+2

如果您包含使用GOTO的_short_(真實)代碼示例(推測以某種命令式語言)並請求使用CPS進行翻譯,則可能會發現此問題將得到更有趣的答案。一般來說,GOTO的問題與CPS的問題與HOF的問題相同 - 控制流程變得非常難以遵循。 – Alec

回答