これはこれと同じ質問ですが、反復(テール再帰)関数の場合はHow to Reverse a List?です。このような機能を作成するにはどうすればいいですか?出来ますか?尾の再帰的なリストの手順を作成するには?
-1
A
答えて
2
またはそれ以上の明示的:
(define (reverse xs)
(let loop ((pend xs)
(res '()))
(if (null? pend)
res
(loop (cdr pend) (cons (car pend) res)))))
クリス倍答えはもっときちんとしていないと、(様々な理由のために)より良いWRTのパフォーマンスすることができます。 質問の第2の部分として、常に可能です。つまり、すべての機能をテール再帰的に行うことができます(機械的に実行できるcpsに変換するなど)。
2
はい。実際にreverse
の標準実装は完全にテール再帰的です。
(define (reverse xs)
(fold cons '() xs))
fold
を使用しないでください。いいえ問題:
(define (reverse xs)
(do ((result '() (cons (car xs) result))
(xs xs (cdr xs)))
((null? xs) result)))
+1
すべてのスキームに折り畳みが組み込まれているわけではないので、srfi-1にあります。明らかにこれは左折です。 – dercz
関連する問題
- 1. 再帰的な手順
- 2. Parallelisingツリーは、再帰的な手順
- 3. 2つのリストを末尾再帰的にマージするには?
- 4. MySQL再帰的サイクル検出手順
- 5. Scalaでこの再帰的メソッドの尾を再帰的にする方法は?
- 6. ディレクトリ内のファイルを作成順に再帰的にリストするにはどうすればよいですか?
- 7. フォルダの基本的な再帰を作成するには?
- 8. 再帰的にディレクトリを作成する
- 9. 再帰的なフォルダの作成
- 10. 再帰的なXSLの作成:If文?
- 11. Bash:再帰的にサブディレクトリを再作成
- 12. 再帰的ツリーインデックスの順序?
- 13. 非再帰アルゴリズムへの再帰的な再帰の手助けが必要
- 14. リストは再帰的に
- 15. F#計算式と末尾再帰の再帰的バインド
- 16. switch文の末尾が再帰的か?
- 17. Haskell再帰関数はリストの末尾に追加します
- 18. emberで再帰的なhbsコードを作成するには?
- 19. 再帰的なGradleタスクを作成するには?
- 20. C++での再帰的リスト操作
- 21. Boost hanaを使って再帰的にconstexprリストを作成するには?
- 22. Pythonでn階乗のリストを再帰的に生成する
- 23. 複数のリストを持つ再帰的順列
- 24. 再帰的クエリを動的に作成する方法は?
- 25. ファイルの作成、再帰的なディレクトリの作成
- 26. 再帰的アルゴリズムは - との新しいリストを作成する対延長「+」
- 27. R:リストの操作を再帰的に実行する
- 28. メニュー配列を再帰的に作成
- 29. vbscriptの再帰的リスト
- 30. リストを再帰的に印刷する
もちろん、本当に再帰的で、CPS変換を介してテール再帰的になる関数は、「無制限の末尾再帰が無制限のメモリ消費をもたらさない」という適切な末尾再帰の要件を実際に満たしません。 ;-) –