任何人都可以解釋Man Or Boy Test返回的值是-67嗎?
我試圖寫下結果,或用調試器跟蹤它。任何幫助,將不勝感激。
可以找到不同實現的列表here。「Man or Boy」Knuth測試如何工作?
5
A
回答
3
This is a nice page對這個男人或男孩的測試。它顯示了以下有趣的事實:
k = 10:A = -67和A被稱爲722次,B被稱爲(A-1)次。
寫一個完整的呼叫追蹤在這種情況下有點用處,因爲函數在本質上是遞歸,增加的功能都沒有純(你可以在哈斯克爾翻譯看,它要求使用STate Monads(包裹在k
周圍以避免雜質):每個函數的作用域(在這種情況下,變量k
:被減1)被修改每次調用或遞歸,並且這些修改是計算正確答案所必需的。
我找到的JavaScript翻譯有點更具可讀性,比原來的ALGOL60實現:
function A(k, x1, x2, x3, x4, x5) {
function B() {
return A(--k, B, x1, x2, x3, x4);
}
return k <= 0 ? x4() + x5() : B();
}
function K(n) { return function() {return n}; }
alert(A(10, K(1), K(-1), K(-1), K(1), K(0)));
訣竅是簿記:什麼引用功能導致其副作用(變量修改),並在長期的事業正確的功能評估。然而,正如我之前解釋的,這本簿記是乏味的。
現代語言(例如此JavaScript示例)具有正確的解釋器/編譯器來處理這些簿記案例。編寫ALGOL60編譯器的時候,有些實現並不正確。測試是爲了將不正確的實現與正確的實現分開。
相關問題
- 1. 測試OR驗證
- 2. 如何讓在'高山Linux Docker容器中工作的'man'?
- 3. OR操作員如何工作
- 4. 測試信號燈如何工作
- 5. `測試`指令如何工作?
- 6. 如何測試是否mod_cache的工作
- 7. 測試客戶如何工作
- 8. 如何測試IIRF的工作原理?
- 9. '和'和'or'如何在SQL中工作
- 10. JavaScript的遞歸OR如何工作?
- 11. Autosys工作測試
- 12. 如何在Selenium測試正在工作的同時工作
- 13. Python:Hang Man遊戲
- 14. 試圖製作一種顯示遊戲猜測字母的方法Hang Man(Java)
- 15. 試圖瞭解Knuth的排列算法
- 16. 運行測試工作
- 17. 測試JSON沒有工作
- 18. Laravel集成測試工作
- 19. Haskell測試工作流程
- 20. 測試SEND_EMAIL不工作
- 21. NUnit測試工作目錄
- 22. XSL:如果測試未正常工作
- 23. OR語句不工作
- 24. 如何製作/測試和/測試/測試兩個HTML頁面
- 25. 負載和性能測試工具如何在幕後工作?
- 26. 如何測試cron作業?
- 27. App Boy iOS實施
- 28. 測試人員正在爲測試和編碼人員執行待定測試編碼工作的工作流程如何工作?
- 29. 變量作用域如何在Mocha測試框架內工作?
- 30. 如何獲得減速機單元測試工作?
這聽起來像是功課,你能解釋前9次迭代是如何工作的嗎?如果你可以做前4個,那麼確定它是如何得到-67應該很容易。這可能有助於更多的答案即將出現,我猜想。 – 2009-11-17 07:31:32
我希望能從已經知道答案的人那裏得到答案。如果您認爲自己完全有能力完成任務,但這絕對不是功課。所有提及的測試我都可以找到說「嘗試在紙上工作可能是沒有用的」這種或那種形式。 – CaptainCasey 2009-11-17 22:00:14