[過去ログ]
Rust part21 (1002レス)
Rust part21 http://mevius.5ch.net/test/read.cgi/tech/1692105879/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
453: デフォルトの名無しさん [sage] 2023/10/08(日) 18:19:11.05 ID:WAd1DVRF enumのリストで書いてみたわ rust不慣れだから所々おかしいかも https://ideone.com/0Ro48L enum List<T> { Cons(T, Box<List<T>>), Nil, } impl<T: Copy + PartialOrd> List<T> { // 略 fn qsort(&self) -> Self { match self { List::Nil => List::Nil, List::Cons(pivot, tail) => { let (smaller, rest) = tail.partition(|x| *x < *pivot); smaller.qsort().concat(&rest.qsort().prepend(*pivot)) } } } } fn main() { let list = List::<i32>::nil().prepend(4).prepend(8).prepend(8).prepend(3).rev(); list.each(|n| print!("{}", n));println!(""); list.qsort().each(|n| print!("{}", n));println!(""); } http://mevius.5ch.net/test/read.cgi/tech/1692105879/453
463: 453 [sage] 2023/10/09(月) 01:16:03.20 ID:VBg3Yonc >>444 >>455 https://ideone.com/Q0LqWM これでクイックソートになってるはず? なってなくても笑って許してほしい http://mevius.5ch.net/test/read.cgi/tech/1692105879/463
488: 453 [sage] 2023/10/12(木) 19:51:44.10 ID:viHBcoi7 今度はDartで書いてみた 3.0でパターンマッチがちょっと強化されたらしい? 3.0新登場のスイッチ式の=>の右側には式だけしか書けない? dartにはそもそもpartitionはない? というわけで>>445のHaskell方式で書いてみた(程遠いけど) List qsort(List list) { return switch (list) { [] => [], [var pivot, ...var rest] => qsort(rest.where((x) => x < pivot).toList()) + [pivot] + qsort(rest.where((x) => pivot <= x).toList()) }; } http://mevius.5ch.net/test/read.cgi/tech/1692105879/488
489: 453 [sage] 2023/10/12(木) 23:01:31.11 ID:viHBcoi7 こういう書き方もできた こっちのほうが雰囲気出てるかな? List qsort(List list) { return switch (list) { [] => [], [var x, ...var xs] => qsort([for (var y in xs) if (y < x) y]) + [x] + qsort([for (var y in xs) if (x <= y) y]) }; } http://mevius.5ch.net/test/read.cgi/tech/1692105879/489
543: 453 [sage] 2023/10/24(火) 00:55:17.36 ID:Ei0IGfb9 >>500 今度は逆にrustで書いたもの>>453をcで書いてみた https://ideone.com/j5KR8Y ・参照透過性は考慮していない ・型のパラメータ化?には挑戦してない ・パターンマッチ再現?にも挑戦してない ・クロージャが欲しいところには呼び出し元の文脈を手渡して誤魔化す ・グローバル変数一個使ってノードの再利用を試みてる ・とにかくlist_qsort内部がそれっぽい感じの手順になってたらヨシ struct node { int value; struct node *next; }; struct node *list_qsort(const struct node *list) { int pivot; struct node *sorted = 0, *tail, *smaller, *rest, *a, *b; if (list) { pivot = list->value, tail = list->next; list_partition(&pivot, less_than_context, tail, &smaller, &rest); sorted = list_append(a = list_qsort(smaller), b = list_cons(pivot, list_qsort(rest))); list_available_push_all4(smaller, rest, a, b); } return sorted; } http://mevius.5ch.net/test/read.cgi/tech/1692105879/543
548: 453 [sage] 2023/10/24(火) 22:19:05.86 ID:yQ/jFyOv >>543 c https://ideone.com/yYGR7x ・ノード再利用やめた ・若干の整理 http://mevius.5ch.net/test/read.cgi/tech/1692105879/548
563: 453 [sage] 2023/10/28(土) 18:50:08.51 ID:U0JINWpQ >>548 c https://ideone.com/Rp476I ・ノードへのポインタとしてリストを表現していた(>>548)のを廃止 ・共用体でリストを表現したことによりBoxの位置?がRust版(>>453)と同じに ・特に意味もなくループ文を再帰に置き換え http://mevius.5ch.net/test/read.cgi/tech/1692105879/563
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.049s