答えて
SRFI 95ソートライブラリを提供します。多くのScheme実装ではソートライブラリも組み込まれていますが、それらのすべてがSRFI 95インターフェイスに準拠しているわけではありません。あなたは(宿題のために、と言う)独自の実装を記述する必要がある場合は
することは、あなたはマージソートやクイックソートのような標準的なソートアルゴリズムのいずれかを使用する必要があります。しかし、これらのアルゴリズムはどちらもベクトルベースのアルゴリズムなので、リストをベクトルにコピーして並べ替え、リストに戻してコピーする必要があります。ベクトル操作操作に便利なSRFI 43があります。特にベクトルの2つの要素を交換するのにvector-swap!
が役に立ちます。
リンクされたリストを直接ソートするのに適したアルゴリズムがあります。私は彼らと一緒にいるわけではないので、私はそれ以上コメントしません。
mergesortとquicksortの両方をリストで簡単に実装できますが、リストをトラバースする必要があるいくつかの箇所で少しのパフォーマンスを失う可能性があります(同じ数の比較を維持していますが)。 – erjiang
ほとんどのSchemeの実装には、リストをソートするプロシージャが付属しています。あなたの実装がそれを提供しない場合、それをあなたの上で動かすことは困難ではありません。ここでは、クイックソートアルゴリズムの実装です:
> (define (qsort e)
(if (or (null? e) (<= (length e) 1)) e
(let loop ((left null) (right null)
(pivot (car e)) (rest (cdr e)))
(if (null? rest)
(append (append (qsort left) (list pivot)) (qsort right))
(if (<= (car rest) pivot)
(loop (append left (list (car rest))) right pivot (cdr rest))
(loop left (append right (list (car rest))) pivot (cdr rest)))))))
> (qsort '(1 3 5 2 9))
=> (1 2 3 5 9)
このプログラムの仕組みについて少し詳しく説明できますか?私はこれまでのような仕事をしたことは一度も見ていません。それはletの後にループ全体のコードがあるように見えるので、なぜラムダを使用しないのですか?私はなぜletが使われているのか分からない。 –
- 1. リストのリストをスキームの最初の要素でソート
- 2. スキーム - リスト
- 3. スキーム:リスト
- 4. スキーム:リスト
- 5. リストを含む式をループするスキーム
- 6. Cでリストをソートする
- 7. elasticsearchのリストでソートする
- 8. fs.createReadStreamでリストをソート
- 9. スキームの(ポイントの)座標を保存しソートする方法は?
- 10. スキームの引用式のリストのリスト
- 11. スキーム内のリストの長さ
- 12. スキーム内のリスト内の空リストを削除する
- 13. JavaScriptでリストをソートする方法は?
- 14. C#でリストをソートする方法
- 15. RecyclerViewでリストをソートする方法
- 16. Lispでcharのリストをソートする
- 17. リストをJavaでstream.sorted()にソートする
- 18. ヌル値でリストをソートする
- 19. リストをソート
- 20. URLスキームのリストはありますか?
- 21. 最小値でリストのリストをソート
- 22. Python:並行リストでリストをソート
- 23. Python:リストのリストをソート
- 24. Javaで配列リストをソート
- 25. リスト内の要素にスキームでアクセスする
- 26. リストをソートするには、文字列をソートするだけですか?
- 27. ファイル://スキームをコンテンツに変換する//スキーム
- 28. リストのリストをソートしてリストを削除する方法
- 29. Python:リストのリストをソートします。
- 30. カスタムオーダーのリストをソート
質問はすでにスタックオーバーフローで尋ねられました。 http://stackoverflow.com/questions/2527150/scheme-sorting-a-list – joce