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)回呼び出されます。あなたはHaskellの翻訳に見ることができるように機能が自然の中で再帰あるような完全なcalltraceを書く
は、(機能が純粋ではないことに加えて、この場合にはビット無用である、それが必要ですk
を包むSTate Monadsの使用:各関数のスコープ(この場合、変数k
:それは1だけ減じられる)は、各呼び出しまたは再帰が変更され、これらの変更は正解の計算に必要とされる。
私は少し読みやすく、元ALGOL60の実装よりもJavaScriptの翻訳を見つける:
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. 機能テストでPUTをどのようにテストしますか?
- 2. VIMの機能はどのようにテストできますか?
- 3. logstash kv {}機能はどのように機能しますか?
- 4. WatchKit:ディクテーション機能はどのように機能しますか?
- 5. 機能はどのように機能しますか?
- 6. コントローラでどのように機能をテストできますか?
- 7. iPhoneの単体テストはどのように機能しますか?
- 8. caffeフレームワークでのテストはどのように機能しますか?
- 9. どのブラウザでどのように機能をテストしますか?
- 10. Androidテスト - どのようにこの機能をテストできますか?
- 11. このJFormattedTextFieldはどのように機能しますか?
- 12. array_udiff()、array_uintersect()などはどのように機能しますか?
- 13. 機能の削減はどのように機能しますか?
- 14. SqlCommandのパラメータはどのように機能しますか?
- 15. ResolveProjectReferencesはどのように機能しますか?
- 16. キーワード引数はどのように機能しますか?
- 17. Atomのスペックファイルはどのように機能しますか?
- 18. 更新機能のCmdをどのようにテストしますか?
- 19. シンボルはどのように機能しますか?
- 20. $ watchのコール機能は一度にどのように機能しますか?
- 21. OpenLayers.Control.Scale.template - それはどのように機能し、全く機能しますか?
- 22. F#インラインはどのように機能しますか?
- 23. lengthプロパティーはどのように機能しますか?
- 24. collections.namedtupleはどのように機能しますか?
- 25. マップ機能はReact.jsではどのように機能しますか?
- 26. Schemeではコレクタ機能はどのように機能しますか?
- 27. TheInternを使用した機能テスト:自分のサイトに対してどのようにテストしますか?
- 28. ORとのこの複雑な表現はどのように機能しますか?
- 29. テキストURLパラメータはどのように機能しますか?
- 30. striposとstr_replaceはどのように機能しますか?
これは宿題のように聞こえますが、最初の9回の反復がどのように機能するか説明できますか?あなたが最初の4つを行うことができれば、それがどのように得られるかを判断することは容易であるはずです。それは今後の答えが増えるのを助けるかもしれない、私は推測するだろう。 –
私はすでに答えを知っていた人から答えを得ることを望んでいました。あなたは、あなたが徹底的に課題に取り組んでいると思うなら、これはほとんど確実に宿題ではありません。私が見つけることができるテストへのすべての言及は、ある形または別の形で「紙の上でそれを処理しようとするのはおそらく無駄です」と言います。 – CaptainCasey