回答
C.伯姆,G Jacopini的,「流程圖,圖靈機和語言只有兩個形成規則」,通訊。 ACM,9(5):366-371,1966。
http://en.wikipedia.org/wiki/Structured_program_theorem
http://en.wikipedia.org/wiki/P"
玻姆 - Jacopini的證據說明了如何構造一個結構化的流程圖從任意的圖表中,使用一個額外的整數變量的比特來跟蹤信息的原始程序表示由程序位置決定。這種結構是基於Böhm的編程語言P「'。 Böhm-Jacopini證明並沒有解決是否採用結構化編程來進行軟件開發的問題,部分原因是這種結構更容易模糊程序而不是改進它。相反,它標誌着辯論的開始。 Edsger Dijkstra的着名信函「Go To Statement Considered Harmful」,於1968年出版。隨後證明了該定理解決了Böhm-Jacopini證明的實際缺點,其結構保持或改進了原始程序的清晰度。 1
http://en.wikipedia.org/wiki/Structured_programming也是一篇不錯的文章。 – 2010-03-24 07:34:16
具有諷刺意味的部分是:當你編譯它時,它會變成大量的gotos(或者是在Assembly中調用的jmp語句) – Toad 2010-03-24 07:58:59
@reinier:諷刺的是它偶爾會導致像「函數調用goto,所以如果我在我的代碼中使用無限制的goto就好了「,或者」功能X只是轉到,不要使用它「。 goto的困難與機器碼無關,結構化編程可以讓代碼更容易。在大多數編譯語言中,'jmp'不等同於goto,因爲goto不僅僅是一個jmp,它通常還需要某種同步才能使堆棧進入目標的正確狀態。 C中的goto'是一個相當高級的編程結構;-) – 2010-03-24 11:40:23
每一個計算機程序可能沒有分支表示。你需要一個無限長的程序,但它可以完成。 (你仍然需要一個if語句)我想這就是你得到你的正式證明的地方。 http://www.jucs.org/jucs_2_11/conditional_branching_is_not/Rojas_R.html
此外,您可以轉到的任何代碼塊都可以分離出來並放置在狀態機或重複循環中。如果你用一個隨機的(和重疊的goto語句)填充的代碼塊,那麼每個goto點可以被分配給一個特定的函數,並且每個轉到可以被替換爲一個function_exit和一個下一個狀態的賦值。
所以
Point1:
do something
Point2:
do something
if blah goto point3
goto point4
point3:
something
point4:
goto point2:
end
can be replaced by
function point1
do something
return = point2
end_function
function point2
do something
if blah return = point3
return = point4
end_function
function point3
something
return = point4
end_function
function point4
return = point2
end_function
state = point1
repeat
state = call_function (state)
until (state=end)
這完全模擬轉到不使用goto語句,也正因爲如此,我會回答 - 是的。
我不知道轉到哪裏goto語句點可以是一個變量。
即使強硬我認爲這是正確的。我不確定這是一臺狀態機,所以您可能需要更正我的語言。自學 - 所以,你知道...... :-) – seanyboy 2010-03-24 07:39:54
「你需要一個無限長的程序,但它可以完成」。這是另一種說「不能做」的方式。我們實際使用的所有計算模型都將程序定義爲有限的,包括圖靈機。 – 2010-03-24 11:43:37
- 1. window.open失去了重點在鉻和IE7
- 2. 點擊鏈接去不了網頁
- 3. UIPageControl - 要去特定的點?
- 4. 有一種方法來驗證,這不使用數據網格?或者這完全失去了重點?
- 5. FilteringSelect失去焦點時不要驗證輸入
- 6. 我的淡入去所有不透明它去透明
- 7. 去聲明和未使用
- 8. 如何證明這一點?
- 9. 失去了一個WinForm
- 10. java哪裏去了一年?
- 11. TestClient去哪了?
- 12. 不能創建一個新的JSONObject();我要去哪裏錯了
- 13. '我的'證書商店去了哪裏?
- 14. 不要去android的前一個屏幕?
- 15. 千萬不要去WebSecurityConfigurerAdapter
- 16. JCombobox失去了重點按ENTER鍵
- 17. jQuery:Textfield失去了重點解開()
- 18. ideavim失去了重點與nnoremap// \ \
- 19. jQuery的scrollTop去錯了錨點
- 20. 觀點失去了滾動recylerview
- 21. 爲什麼不是這個文本要進去這個盒子?
- 22. 去例程和渠道去
- 23. Lucene.Net.Highlight哪裏去了?
- 24. FacebookOAuthClient去了哪裏?
- 25. Contacts.Groups.GROUP_MY_CONTACTS去了哪裏?
- 26. System.Design去了哪裏?
- 27. 在這個事件去這個網址,否則去這裏
- 28. @「transform.rotation.y」動畫失去了UIView子類的圖層不透明度
- 29. 需要去掉不需要的文本
- 30. 。我不明白這一點
證據是:你可以實現一個通用圖靈機無需轉到的,你可以實現一個通用圖靈機和代表其輸入的字符串的任何算法。 – jkff 2010-03-24 13:01:24
'goto'功能可以引入「多個入口循環」,也稱爲「不可約」循環。消除不可約循環本質上是通過複製代碼來實現的。爲的討論(http://moss.csc.ncsu.edu/~mueller/ftp/pub/mueller/papers/europar01.ps.gz):見[優化節點分裂與DJ-圖形處理不可約循環]這方面可以完成。 – 2010-03-24 07:27:39