競え
※前スレ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
探検
C vs C++ vs Rust Part.2
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2021/12/15(水) 12:35:50.91ID:biBE4xC0196デフォルトの名無しさん
2021/12/24(金) 23:02:03.16ID:UVQKl71H >>186
> わざわざ決まってる数列を順番に出力するイテレータ書くのにそんな記述が必要になるのか
決まってる数列ではなく毎回算出するんですよ
記述については各々のイテレータはそれぞれ何らかの構造体にすぎないので >>176に示しましたように
「(a) イテレータとなる構造体の型宣言」「(b) その構造体の初期値定義 new()」「(c) 今回は自分と子と孫がいるためその関係記述」
があってようやく、>174に示しました「(d) イテレータ自体の毎回の算出コード」がそこに加わります
一般的にも今回の特殊な用途(c)を除いた3つ(a)(b)(d)は必要です
さらに>>195でいうところの仲介型イテレータはそれらの記述に加えて
「(e) 他のイテレータのメソッドとなりチェーンできるようにするための宣言」がさらに必要となります
上述(a)(b)(d)の部分の記述だけならば
お手軽にイテレータを生成できる itertools::unfold() を使えるケースだと
例えばフィボナッチ数列を返すジェネリックなイテレータは
以下のように初期値と処理クロージャを1つunfold()に与えてやればイテレータを作れます
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: Clone + num::Zero + num::One + num::CheckedAdd + std::cmp::PartialEq,
{
itertools::unfold((T::one(), T::one()), |(m, n)| {
if *m == T::zero() {
// overflow
return None;
}
// shift: ret <- m <- n <- next
let next = m.checked_add(&*n).unwrap_or(T::zero());
let ret = m.clone();
*m = n.clone();
*n = next;
Some(ret)
})
}
> わざわざ決まってる数列を順番に出力するイテレータ書くのにそんな記述が必要になるのか
決まってる数列ではなく毎回算出するんですよ
記述については各々のイテレータはそれぞれ何らかの構造体にすぎないので >>176に示しましたように
「(a) イテレータとなる構造体の型宣言」「(b) その構造体の初期値定義 new()」「(c) 今回は自分と子と孫がいるためその関係記述」
があってようやく、>174に示しました「(d) イテレータ自体の毎回の算出コード」がそこに加わります
一般的にも今回の特殊な用途(c)を除いた3つ(a)(b)(d)は必要です
さらに>>195でいうところの仲介型イテレータはそれらの記述に加えて
「(e) 他のイテレータのメソッドとなりチェーンできるようにするための宣言」がさらに必要となります
上述(a)(b)(d)の部分の記述だけならば
お手軽にイテレータを生成できる itertools::unfold() を使えるケースだと
例えばフィボナッチ数列を返すジェネリックなイテレータは
以下のように初期値と処理クロージャを1つunfold()に与えてやればイテレータを作れます
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: Clone + num::Zero + num::One + num::CheckedAdd + std::cmp::PartialEq,
{
itertools::unfold((T::one(), T::one()), |(m, n)| {
if *m == T::zero() {
// overflow
return None;
}
// shift: ret <- m <- n <- next
let next = m.checked_add(&*n).unwrap_or(T::zero());
let ret = m.clone();
*m = n.clone();
*n = next;
Some(ret)
})
}
197デフォルトの名無しさん
2021/12/24(金) 23:05:16.16ID:UVQKl71H198デフォルトの名無しさん
2021/12/24(金) 23:17:20.90ID:759ZBatD より良い方法に興味があるんなら、普通に既存実装を研究してみたらいいんじゃない?
例えばRubyの標準添付ライブラリにも Prime.each があるよ
ソースはここ https://github.com/ruby/prime
おれはそこまで素数のアルゴリズム自体には興味ないから考えないけど
例えばRubyの標準添付ライブラリにも Prime.each があるよ
ソースはここ https://github.com/ruby/prime
おれはそこまで素数のアルゴリズム自体には興味ないから考えないけど
199デフォルトの名無しさん
2021/12/25(土) 01:08:34.65ID:0QMGJaE9 >>197
CかC++で書いて
CかC++で書いて
200デフォルトの名無しさん
2021/12/25(土) 04:20:39.50ID:9OzOPrjS C/C++/Rustならどの言語も理解できないほどの特異な書き方や奇妙な省略もなくどれも似たようなもんだ
どれか一つで書かれていれば普通のプログラマーなら読めるだろう
それでもわからない部分があれば質問したら皆が教えてくれるぞ
どれか一つで書かれていれば普通のプログラマーなら読めるだろう
それでもわからない部分があれば質問したら皆が教えてくれるぞ
201デフォルトの名無しさん
2021/12/25(土) 06:09:26.55ID:sZ4+jXNJ202デフォルトの名無しさん
2021/12/25(土) 09:05:26.62ID:0QMGJaE9 >>200
普通のプログラマじゃなくて雑魚なんで
Rustで書かれたコードはわからないしRustの説明が欲しいわけじゃない
C/C++で書かれてれば説明無用だから全部わかるならC/C++で書いてくれない?
普通のプログラマじゃなくて雑魚なんで
Rustで書かれたコードはわからないしRustの説明が欲しいわけじゃない
C/C++で書かれてれば説明無用だから全部わかるならC/C++で書いてくれない?
203デフォルトの名無しさん
2021/12/25(土) 13:08:57.90ID:6OMvh/ue Ruby の無限generator は、遅延評価する。lazy
普通に、メソッドチェーンを左から処理していくと、
無限に処理できないので、右から処理していく
素数は、6 で割って余りが、1 か5
余りが3なら、3で割り切れる。
余りが2, 4なら、2で割り切れる
普通に、メソッドチェーンを左から処理していくと、
無限に処理できないので、右から処理していく
素数は、6 で割って余りが、1 か5
余りが3なら、3で割り切れる。
余りが2, 4なら、2で割り切れる
204デフォルトの名無しさん
2021/12/25(土) 13:31:00.64ID:Jczj7qaZ 素数に2,3が含まれるの忘れてる?
205デフォルトの名無しさん
2021/12/25(土) 13:54:13.44ID:0QMGJaE9 if (25 % 6 == 1) {
//25は素数?
}
//25は素数?
}
206デフォルトの名無しさん
2021/12/25(土) 14:02:33.11ID:+KvRe5Is >>205
さすがに必要条件と十分条件がわからないのはどうかと思う
さすがに必要条件と十分条件がわからないのはどうかと思う
207デフォルトの名無しさん
2021/12/25(土) 14:14:33.50ID:0QMGJaE9208デフォルトの名無しさん
2021/12/25(土) 14:21:15.89ID:6Qf096MJ >>194
その考え方がまさに木を見て森を見ず
その考え方がまさに木を見て森を見ず
209デフォルトの名無しさん
2021/12/25(土) 14:40:34.51ID:E7PEPPKI210デフォルトの名無しさん
2021/12/25(土) 15:29:54.15ID:0QMGJaE9 その事実を利用してまずは数を6で割って余りが1 or 5のとき
改めて素数かどうかを判定する関数に通すってことか?
rem = X % 6
if ((rem == 1 || rem == 5) && is_prime(X)) {
// Xは素数
}
else {
// Xは合成数
}
改めて素数かどうかを判定する関数に通すってことか?
rem = X % 6
if ((rem == 1 || rem == 5) && is_prime(X)) {
// Xは素数
}
else {
// Xは合成数
}
211デフォルトの名無しさん
2021/12/25(土) 16:04:02.04ID:a8rAfIFO 必要十分を理解してないエンジンは無価値
212デフォルトの名無しさん
2021/12/25(土) 16:50:37.75ID:sZ4+jXNJ 電気モーターの時代だから。
213デフォルトの名無しさん
2021/12/25(土) 17:51:05.49ID:cg2rHVf2 >>195
発信、受信、仲介、合成、創造?
コンピューターサイエンス分野を見てもRust公式を見てもそんな用語は1つもないけど
それってもしかしてあんたの個人的な思想ですか?それなら知りたくないのでウザいので黙っててもらえますか?
したがって今回のRustオジサンは気持ち悪い基地外だと思います
発信、受信、仲介、合成、創造?
コンピューターサイエンス分野を見てもRust公式を見てもそんな用語は1つもないけど
それってもしかしてあんたの個人的な思想ですか?それなら知りたくないのでウザいので黙っててもらえますか?
したがって今回のRustオジサンは気持ち悪い基地外だと思います
214デフォルトの名無しさん
2021/12/25(土) 17:58:00.70ID:+KvRe5Is >>213
気持ちはわかるけど最後の一文が個人的な気持ちになってて同じ穴の狢になってない?
気持ちはわかるけど最後の一文が個人的な気持ちになってて同じ穴の狢になってない?
215デフォルトの名無しさん
2021/12/25(土) 18:19:18.17ID:IFpjnGkc >発信、受信、仲介、合成、創造
たしかにこの用語なんなん? どっから出てきたの?
どの界隈のコンセンサスで得てる言葉なの?
たしかにこの用語なんなん? どっから出てきたの?
どの界隈のコンセンサスで得てる言葉なの?
216デフォルトの名無しさん
2021/12/25(土) 18:20:04.09ID:IFpjnGkc >コンサンサスで
じゃなくて、コンセンサスを
じゃなくて、コンセンサスを
217デフォルトの名無しさん
2021/12/25(土) 18:26:25.36ID:E7PEPPKI ワイもこの用語はわかんなかった
218デフォルトの名無しさん
2021/12/25(土) 19:07:03.87ID:PUQlITfY 仲介なんて不動産屋でしか聞いたことないわw
219デフォルトの名無しさん
2021/12/25(土) 19:14:05.00ID:9OzOPrjS イテレーターを作ったことがない初心者プログラマーには理解が難しいと思うが
命名はともかくイテレーターがそのように分類されることは俺でもわかるぜ
>(1) 発信イテレータ … >>174で示しました素数生成、レンジ(0..n)、配列やVecに対するiter()などチェーンでは先頭に来るもの
これはRustだとimpl Iterator for XXXのみ実装のイテレーター
つまり他者のnext()は利用せずに他者に対してnext()を提供
>(2) 仲介イテレータ … map()、filter()、enumerate()などチェーンでは中間に来るもの
これはRustだとimpl Iterator for XXXおよびimpl XXX for Iteratorと両方実装のイテレーター
つまり他者のnext()を利用しつつ別の他者に対してnext()を提供
>(3) 受信イテレータ … find()、fold()、collect()などチェーンでは最後に来るもの
これはRustだとimpl XXX for Iteratorのみ実装のイテレーター
つまり他者のnext()を利用するが他者に対してnext()を提供せず
以前に議論されていた消費者プログラマー(?)だと区別を一生気付かないままかもしれぬ
命名はともかくイテレーターがそのように分類されることは俺でもわかるぜ
>(1) 発信イテレータ … >>174で示しました素数生成、レンジ(0..n)、配列やVecに対するiter()などチェーンでは先頭に来るもの
これはRustだとimpl Iterator for XXXのみ実装のイテレーター
つまり他者のnext()は利用せずに他者に対してnext()を提供
>(2) 仲介イテレータ … map()、filter()、enumerate()などチェーンでは中間に来るもの
これはRustだとimpl Iterator for XXXおよびimpl XXX for Iteratorと両方実装のイテレーター
つまり他者のnext()を利用しつつ別の他者に対してnext()を提供
>(3) 受信イテレータ … find()、fold()、collect()などチェーンでは最後に来るもの
これはRustだとimpl XXX for Iteratorのみ実装のイテレーター
つまり他者のnext()を利用するが他者に対してnext()を提供せず
以前に議論されていた消費者プログラマー(?)だと区別を一生気付かないままかもしれぬ
220デフォルトの名無しさん
2021/12/25(土) 19:17:12.81ID:Jczj7qaZ 本来の用語は何?
221デフォルトの名無しさん
2021/12/25(土) 19:46:48.90ID:+KvRe5Is222デフォルトの名無しさん
2021/12/25(土) 20:41:43.56ID:qfkDfu3c >>219
自演バレバレやぞw
自演バレバレやぞw
223デフォルトの名無しさん
2021/12/25(土) 21:08:04.90ID:9OzOPrjS224デフォルトの名無しさん
2021/12/25(土) 21:22:55.51ID:0QMGJaE9 足し算で素数を求めるアルゴリズムについて知りたいんだが誰かC/C++で書ける人いないの?
225デフォルトの名無しさん
2021/12/25(土) 21:41:11.69ID:Sq1Xjjv1 独自に分類名を付けようとする試みは評価するが
チュートリアルに書いてるレベルの内容で
「初心者プログラマーには理解が難しいと思うが」とか言っちゃう初心者プログラマーはどうかと思う
チュートリアルに書いてるレベルの内容で
「初心者プログラマーには理解が難しいと思うが」とか言っちゃう初心者プログラマーはどうかと思う
226デフォルトの名無しさん
2021/12/25(土) 21:53:14.53ID:Sq1Xjjv1 公式用語はsource、adapter、consumer
227デフォルトの名無しさん
2021/12/25(土) 22:31:39.88ID:sZ4+jXNJ イテレータはライブラリ作者と利用者の間でループをやり取りするには便利なものです。
しかし、それ以外で使ってもパッとしない。
しかし、それ以外で使ってもパッとしない。
228デフォルトの名無しさん
2021/12/25(土) 23:31:43.20ID:nV1lOrYt229デフォルトの名無しさん
2021/12/25(土) 23:46:56.47ID:cn6bnobm 試し割り法で検索しろ
230デフォルトの名無しさん
2021/12/26(日) 00:33:01.70ID:kT157QEc >>228
素数が足し算平均2.5回程度で求まるアルゴリズムを説明してくれないか?
素数が足し算平均2.5回程度で求まるアルゴリズムを説明してくれないか?
231デフォルトの名無しさん
2021/12/26(日) 02:08:18.89ID:N3NYq5+A Rustという世界最高の言語があるのに、なぜRubyを使うのが正しいのか。
リーン・スタートアップという本を読めばわかるよ。
リーン・スタートアップという本を読めばわかるよ。
232デフォルトの名無しさん
2021/12/26(日) 10:42:00.41ID:bwDwv7pP Ruby on Railsは、GitHub, Airbnb, Disney, Hulu, SoundCloud, Shopify といった世界的に有名な企業や、
日本国内でも、note、クックパッド、freee、マネーフォワード、Progate、Qiita などで使われている
2021年10月には、GitHubのコピーで、Railsを使い続ける宣言をしている、
GitLab が上場し、時価総額は約1.9兆円!
一方、GitHubはGo へ以降する
Railsを使う理由を端的に言えば、もうかるから
Ruby biz Grand prix 2020 大賞を受賞した、Ruby の女神・池澤あやかも言ってる。
他の言語では開発者を確保しにくいので、Railsに切り替えた
日本国内でも、note、クックパッド、freee、マネーフォワード、Progate、Qiita などで使われている
2021年10月には、GitHubのコピーで、Railsを使い続ける宣言をしている、
GitLab が上場し、時価総額は約1.9兆円!
一方、GitHubはGo へ以降する
Railsを使う理由を端的に言えば、もうかるから
Ruby biz Grand prix 2020 大賞を受賞した、Ruby の女神・池澤あやかも言ってる。
他の言語では開発者を確保しにくいので、Railsに切り替えた
233デフォルトの名無しさん
2021/12/26(日) 10:47:24.01ID:bwDwv7pP Mediator は、空港の管制塔
234デフォルトの名無しさん
2021/12/26(日) 15:09:49.43ID:h4Mdc0Ob >>214
仲介手数料、信用創造、お前が同じ穴の狢、アホのRustオジサンです
仲介手数料、信用創造、お前が同じ穴の狢、アホのRustオジサンです
235デフォルトの名無しさん
2021/12/26(日) 16:15:26.85ID:Tvo9Wvhs >>173
1億までの素数を全て生成するのに足し算2.5億回で済む理由がわかった
素数でなければ1万以下の素数が約数として必ずあるから順に最大素数9973まで調べるだけでよい
1億/2 + 1億/3 + 1億/5 + 1億/7 + 1億/11 + … + 1億/9973 = 約2.5億の足し算で原理的には済むはず
1億までの素数を全て生成するのに足し算2.5億回で済む理由がわかった
素数でなければ1万以下の素数が約数として必ずあるから順に最大素数9973まで調べるだけでよい
1億/2 + 1億/3 + 1億/5 + 1億/7 + 1億/11 + … + 1億/9973 = 約2.5億の足し算で原理的には済むはず
236デフォルトの名無しさん
2021/12/26(日) 21:21:30.44ID:MtmTWc/M237デフォルトの名無しさん
2021/12/26(日) 21:25:21.15ID:XOSaINd5 エラトステネスの篩、のことなのでは?
でも1億分のバッファとか、勿体ない気がしますね…
でも1億分のバッファとか、勿体ない気がしますね…
238デフォルトの名無しさん
2021/12/26(日) 22:30:41.92ID:RjefXsAR そこで区間篩ですよ
239デフォルトの名無しさん
2021/12/26(日) 22:31:44.15ID:kT157QEc 発見済みの素数を使ってループして数Xが素数かどうかを調べてるだけだろ?
足し算平均2.5回って意味不明なんだが?
足し算平均2.5回って意味不明なんだが?
240デフォルトの名無しさん
2021/12/26(日) 22:57:15.49ID:Tvo9Wvhs241デフォルトの名無しさん
2021/12/26(日) 23:11:50.20ID:Tvo9Wvhs そう書いていたら謎が解けた
>>235
> 1億/2 + 1億/3 + 1億/5 + 1億/7 + 1億/11 + … + 1億/9973 = 約2.5億の足し算で原理的には済むはず
これは1億✕(1/2 + 1/3 + 1/5 + 1/7 + 1/11 + … )だから括弧内は素数の逆数の和でlog log N
1億がNだから足し算の回数はO(N log log N)なのか
>>235
> 1億/2 + 1億/3 + 1億/5 + 1億/7 + 1億/11 + … + 1億/9973 = 約2.5億の足し算で原理的には済むはず
これは1億✕(1/2 + 1/3 + 1/5 + 1/7 + 1/11 + … )だから括弧内は素数の逆数の和でlog log N
1億がNだから足し算の回数はO(N log log N)なのか
242デフォルトの名無しさん
2021/12/26(日) 23:46:34.73ID:L9HJqboW243デフォルトの名無しさん
2021/12/27(月) 00:18:24.10ID:OK/wNcge >>242
C言語でいいから加算で素数を求めるアルゴリズム書いてくれない?
C言語でいいから加算で素数を求めるアルゴリズム書いてくれない?
244デフォルトの名無しさん
2021/12/27(月) 08:37:12.33ID:vZ39sN8j このスレで出てきているテレーターがよくわからんのだけど、wikipediaの定義と違うんかいな?
ttps://ja.m.wikipedia.org/wiki/%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF
ttps://ja.m.wikipedia.org/wiki/%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF
245デフォルトの名無しさん
2021/12/27(月) 09:31:03.72ID:2XZCOhTP >>244
その日本語wikiは怪しいので英語のwikiを見るといい
その日本語wikiは怪しいので英語のwikiを見るといい
246デフォルトの名無しさん
2021/12/27(月) 13:29:55.23ID:ZyPtB7dw 100回繰り返すのと1億回繰り返すのとどっちがマヌケに見えるか、億という言葉を使えば賢く見えるのか?
億回繰り返さないと理解できないのか、汚コードRust相談室と化したC vs C++ vs Rustスレに未来はあるのか
億回繰り返さないと理解できないのか、汚コードRust相談室と化したC vs C++ vs Rustスレに未来はあるのか
247デフォルトの名無しさん
2021/12/27(月) 14:18:09.83ID:Btn3kp2t 隔離スレに未来などあるわけあるか
248デフォルトの名無しさん
2021/12/27(月) 18:22:06.83ID:/o/Y1bP3 >>244
実際のコード例で体験していくと理解が早い
例えばこの計算をしたいとする
>>235
> 素数でなければ1万以下の素数が約数として必ずあるから順に最大素数9973まで調べるだけでよい
> 1億/2 + 1億/3 + 1億/5 + 1億/7 + 1億/11 + … + 1億/9973 = 約2.5億の足し算で原理的には済むはず
コードは>>176の素数生成イテレータも使って以下のイテレータ4つの連鎖で求まる
let result: i32 = 素数生成::<i32>()
.take_while(|&p| p < 10000)
.map(|p| 100000000 / p)
.sum();
途中のtake_while()は条件を満たす間だけ取るイテレータでこの場合は「1万未満」が条件
map()は変換するイテレータで「素数pを1億/p」へ変換している
最後にsum()で流れてきた1億/pを「全て足して」目的を達成
このように個々の単機能イテレータを複数組み合わせて連鎖させることでプログラミングできる
実際のコード例で体験していくと理解が早い
例えばこの計算をしたいとする
>>235
> 素数でなければ1万以下の素数が約数として必ずあるから順に最大素数9973まで調べるだけでよい
> 1億/2 + 1億/3 + 1億/5 + 1億/7 + 1億/11 + … + 1億/9973 = 約2.5億の足し算で原理的には済むはず
コードは>>176の素数生成イテレータも使って以下のイテレータ4つの連鎖で求まる
let result: i32 = 素数生成::<i32>()
.take_while(|&p| p < 10000)
.map(|p| 100000000 / p)
.sum();
途中のtake_while()は条件を満たす間だけ取るイテレータでこの場合は「1万未満」が条件
map()は変換するイテレータで「素数pを1億/p」へ変換している
最後にsum()で流れてきた1億/pを「全て足して」目的を達成
このように個々の単機能イテレータを複数組み合わせて連鎖させることでプログラミングできる
249デフォルトの名無しさん
2021/12/27(月) 21:02:50.96ID:/sRDJTH0 まーたイテレータの定義をよくわかってないやつがヘンテコな説明しちゃう
250デフォルトの名無しさん
2021/12/27(月) 22:13:30.95ID:h+0xE8z4 ヘンテコなとこに気がつけなかったんだけど、どのへん?
251デフォルトの名無しさん
2021/12/27(月) 23:21:22.61ID:N7w3YVE+ 今どきの言語のイテレータは>>248で合っている
しかしC++のイテレータは低レベルでポインタを抽象化したものと考えたほうがいいので注意
C++にもようやくmap()に相当するものが入ったが他言語とは異なりtransform()という名前など使いにくい
今どきのプログラミングしたいなら素直にRustを使ったほうが便利
しかしC++のイテレータは低レベルでポインタを抽象化したものと考えたほうがいいので注意
C++にもようやくmap()に相当するものが入ったが他言語とは異なりtransform()という名前など使いにくい
今どきのプログラミングしたいなら素直にRustを使ったほうが便利
252デフォルトの名無しさん
2021/12/27(月) 23:38:31.34ID:0wmEJTQl253デフォルトの名無しさん
2021/12/27(月) 23:39:05.80ID:pyO9ra+c この文中に>>入れる自作自演の同一人物の基地外Rustのくせはほんと気持ち悪い。また引用で > 使う
254デフォルトの名無しさん
2021/12/27(月) 23:41:50.94ID:OK/wNcge 伝統的には値を生成するものはジェネレータと呼ぶわな
255デフォルトの名無しさん
2021/12/27(月) 23:46:27.40ID:Bqcwp6fR >>253
はちみつ病だからスルーしてさしあげろ
はちみつ病だからスルーしてさしあげろ
256デフォルトの名無しさん
2021/12/27(月) 23:49:02.66ID:N7w3YVE+ >>254
それは観点が違うな
値を生成するものであってもイテレータとして機能するものと機能しないものがある
つまり重要な点はイテレータとして機能するか否かのみ
Rustの1..nやこのスレの素数生成はイテレータとして機能しているから明白にイテレータ
それは観点が違うな
値を生成するものであってもイテレータとして機能するものと機能しないものがある
つまり重要な点はイテレータとして機能するか否かのみ
Rustの1..nやこのスレの素数生成はイテレータとして機能しているから明白にイテレータ
257デフォルトの名無しさん
2021/12/28(火) 01:27:16.67ID:iF4hooVM ジェネレータはみんなイテレータだから
258デフォルトの名無しさん
2021/12/28(火) 10:31:13.05ID:wyc7do74 やっぱり頭がおかしいよ、1..nはRange { start: 1, end: n }と同じ。Rust公式でもイテレータじゃなく
単にRangeと言っているだけなのに、それが機能するかという観点ならfor inが無ければ機能しないから
イテレータじゃない。collect()がイテレータをコレクションに変換するように、for inで(暗黙)変換されるだけ。
こいつ、あちこちで暴れてる
単にRangeと言っているだけなのに、それが機能するかという観点ならfor inが無ければ機能しないから
イテレータじゃない。collect()がイテレータをコレクションに変換するように、for inで(暗黙)変換されるだけ。
こいつ、あちこちで暴れてる
259デフォルトの名無しさん
2021/12/28(火) 11:06:40.72ID:We8KhoPF RangeはIterator実装してるからrustの定義ではイテレータではあるのでは
260デフォルトの名無しさん
2021/12/28(火) 11:57:32.05ID:c+MbZA8y 汚コード厨まだ居るのか
261デフォルトの名無しさん
2021/12/28(火) 12:05:42.28ID:SY7gTV8u >>258
君もイテレータがわかってないお仲間さんなので仲良く勉強しとけ
君もイテレータがわかってないお仲間さんなので仲良く勉強しとけ
262デフォルトの名無しさん
2021/12/28(火) 12:13:02.75ID:SY7gTV8u プログラミング初心者でもないのにイテレータを理解してないやつがRustスレに多いのはなぜ?
263デフォルトの名無しさん
2021/12/28(火) 12:16:44.18ID:F00FUyP7 ここ本スレではなく隔離スレ
スレ民の目的はただの冷やかし
スレ民の目的はただの冷やかし
264デフォルトの名無しさん
2021/12/28(火) 14:55:22.51ID:uwqQYFJJ "仲介イテレータ"
約 2 件 (0.26 秒)
すげー、全世界で、このスレにしかその言葉は存在しない
約 2 件 (0.26 秒)
すげー、全世界で、このスレにしかその言葉は存在しない
265デフォルトの名無しさん
2021/12/28(火) 15:25:43.05ID:c+MbZA8y 厨怪イッテレータ
266デフォルトの名無しさん
2021/12/28(火) 15:44:45.74ID:WXYqKfV2 >>262
一番レスの多い自演厨が理解してないから、そう見えるだけ
一番レスの多い自演厨が理解してないから、そう見えるだけ
267デフォルトの名無しさん
2021/12/28(火) 16:37:20.65ID:a2iPSFXu イテレータには狭義のイテレータと広義のイテレータがある
広義のイテレータは狭義のイテレータとイテレータメソッドを合わせたものである
(A) イテレータ(狭義)
Rustで言えばtrait Iteratorを実装するもの
コード上で「impl Iterator for 各イテレータが返す型」となって現れる
各イテレータが返す型は通常structでありimpl Iterator<Item=T>を満たす
メソッドとしてnext()を持ちこれがOption<T>を返す
(B) イテレータメソッド
Rustで言えば上述イテレータ(狭義)のメソッドとなるもの
コード上では「impl 宣言用トレイト for Iterator」の中で現れる
各イテレータメソッドが返す型は任意でありfor_each()のように無しもある
対象となったイテレータ(狭義)のnext()を利用する側となる
>>195
| (1) 発信イテレータ … >>174で示しました素数生成、レンジ(0..n)、配列やVecに対するiter()などチェーンでは先頭に来るもの
| (2) 仲介イテレータ … map()、filter()、enumerate()などチェーンでは中間に来るもの
| (3) 受信イテレータ … find()、fold()、collect()などチェーンでは最後に来るもの
その分類で言えば
(1) = (A) かつ not (B) = イテレータ(狭義)だが イテレータメソッドではない
(2) = (A) かつ (B) = イテレータ(狭義)であり イテレータメソッドでもある
(3) = not (A) かつ (B) = イテレータメソッドだが イテレータ(狭義)ではない
広義のイテレータは狭義のイテレータとイテレータメソッドを合わせたものである
(A) イテレータ(狭義)
Rustで言えばtrait Iteratorを実装するもの
コード上で「impl Iterator for 各イテレータが返す型」となって現れる
各イテレータが返す型は通常structでありimpl Iterator<Item=T>を満たす
メソッドとしてnext()を持ちこれがOption<T>を返す
(B) イテレータメソッド
Rustで言えば上述イテレータ(狭義)のメソッドとなるもの
コード上では「impl 宣言用トレイト for Iterator」の中で現れる
各イテレータメソッドが返す型は任意でありfor_each()のように無しもある
対象となったイテレータ(狭義)のnext()を利用する側となる
>>195
| (1) 発信イテレータ … >>174で示しました素数生成、レンジ(0..n)、配列やVecに対するiter()などチェーンでは先頭に来るもの
| (2) 仲介イテレータ … map()、filter()、enumerate()などチェーンでは中間に来るもの
| (3) 受信イテレータ … find()、fold()、collect()などチェーンでは最後に来るもの
その分類で言えば
(1) = (A) かつ not (B) = イテレータ(狭義)だが イテレータメソッドではない
(2) = (A) かつ (B) = イテレータ(狭義)であり イテレータメソッドでもある
(3) = not (A) かつ (B) = イテレータメソッドだが イテレータ(狭義)ではない
268デフォルトの名無しさん
2021/12/28(火) 17:20:35.84ID:UIm7WL46269デフォルトの名無しさん
2021/12/28(火) 18:00:29.58ID:p0MyQfYl 素数生成君と仲介イテレータ君は同一人物だったのか
どおりで
どおりで
270デフォルトの名無しさん
2021/12/28(火) 22:24:23.54ID:ndrZKvgW271デフォルトの名無しさん
2021/12/28(火) 22:25:36.06ID:t/L66bQ2 こいつ何度間違っても全く反省しないなww
良い子は鵜呑みにしないで自分で調べようね
良い子は鵜呑みにしないで自分で調べようね
272デフォルトの名無しさん
2021/12/28(火) 22:28:28.38ID:t/L66bQ2 あ、>>270のことじゃないからね
273デフォルトの名無しさん
2021/12/28(火) 22:35:42.94ID:t/L66bQ2 >>270
詫びがてら説明しておくがイテレータは数えあげる人のこと
「次くれ」→ 「はい、どうぞ」
「次くれ」→ 「はい、どうぞ」
「次くれ」→ 「もうありません」
数えあげる対象物を数えあげる人自身が持ってる場合もあれば持ってない場合もある
impl Iteratorしてるのがイテレータなのは間違いない
詫びがてら説明しておくがイテレータは数えあげる人のこと
「次くれ」→ 「はい、どうぞ」
「次くれ」→ 「はい、どうぞ」
「次くれ」→ 「もうありません」
数えあげる対象物を数えあげる人自身が持ってる場合もあれば持ってない場合もある
impl Iteratorしてるのがイテレータなのは間違いない
274デフォルトの名無しさん
2021/12/28(火) 22:49:58.47ID:a2iPSFXu275デフォルトの名無しさん
2021/12/28(火) 23:41:11.95ID:c9bIiubz 出典もなしに能書き垂れるのやめろ
276デフォルトの名無しさん
2021/12/28(火) 23:52:38.14ID:a2iPSFXu デザインパターンの一つであるイテレータパターンの説明図 (wikipediaより)
https://upload.wikimedia.org/wikipedia/commons/c/c5/W3sDesign_Iterator_Design_Pattern_UML.jpg
next()を持つものがイテレータ
つまり>>267の定義で合っている
https://upload.wikimedia.org/wikipedia/commons/c/c5/W3sDesign_Iterator_Design_Pattern_UML.jpg
next()を持つものがイテレータ
つまり>>267の定義で合っている
277デフォルトの名無しさん
2021/12/28(火) 23:56:51.47ID:OoEjLphs 視野が狭く思い込んだら多くの人が警告しているのに完全に無視し「定義」だの仲介だの創造だの自分勝手に講釈を垂れる
278デフォルトの名無しさん
2021/12/28(火) 23:59:15.51ID:a2iPSFXu Rust公式Bookでも同じ
https://doc.rust-jp.rs/book-ja/ch13-02-iterators.html
全てのイテレータは、標準ライブラリで定義されているIteratorというトレイトを実装しています。
Iteratorトレイトを実装するには、Item型も定義する必要があり、
そして、このItem型がnextメソッドの戻り値の型に使われています。
イテレータに対して直接nextメソッドを呼び出すこともできます。
https://doc.rust-jp.rs/book-ja/ch13-02-iterators.html
全てのイテレータは、標準ライブラリで定義されているIteratorというトレイトを実装しています。
Iteratorトレイトを実装するには、Item型も定義する必要があり、
そして、このItem型がnextメソッドの戻り値の型に使われています。
イテレータに対して直接nextメソッドを呼び出すこともできます。
279デフォルトの名無しさん
2021/12/29(水) 01:29:32.54ID:R7H13gAM280デフォルトの名無しさん
2021/12/29(水) 02:02:16.54ID:8RYkbehC281デフォルトの名無しさん
2021/12/29(水) 03:47:51.11ID:L3UdfSEZ イテレーターの定義はIteratorを実装してる型で良いと思うがそれがどう C vs C++ vs Rust に繋がるのか
282デフォルトの名無しさん
2021/12/29(水) 09:34:00.36ID:/J/UmHDr283デフォルトの名無しさん
2021/12/29(水) 12:27:51.74ID:EOkSZQC4 イテレータメソッドというのは多くの言語では一般的にはイテレータを返すメソッドのこと
Java, C#, C++, JavaScript, Python, Ruby, Scala等々
RustではIterator Trait’s Methodsの意味で
“iterator methods”という言葉が使われるがこれは訳すなら”イテレータのメソッド”
Rustに限った話でもIterator Traitの個別メソッドを
”イテレータ”と呼んでるのはnext()を除いて聞いたことがないので
広義のイテレータを定義してるソースがあるなら提示してもらいたい
Java, C#, C++, JavaScript, Python, Ruby, Scala等々
RustではIterator Trait’s Methodsの意味で
“iterator methods”という言葉が使われるがこれは訳すなら”イテレータのメソッド”
Rustに限った話でもIterator Traitの個別メソッドを
”イテレータ”と呼んでるのはnext()を除いて聞いたことがないので
広義のイテレータを定義してるソースがあるなら提示してもらいたい
284デフォルトの名無しさん
2021/12/29(水) 13:18:44.91ID:gOOeSowg >>283
必死こいて言い訳のソースを調査中だから期待して待っててね
必死こいて言い訳のソースを調査中だから期待して待っててね
285デフォルトの名無しさん
2021/12/29(水) 13:20:17.30ID:2nRAq0Kh javaだと
public interface Iterator<E>
ここにあるメソッドをiterator methodsと読んでる人居るね
まあ単にイテレータのメソッドってことなんだけど
public interface Iterator<E>
ここにあるメソッドをiterator methodsと読んでる人居るね
まあ単にイテレータのメソッドってことなんだけど
286デフォルトの名無しさん
2021/12/29(水) 13:36:57.67ID:uJWdQe45 >イテレータメソッドというのは多くの言語では一般的にはイテレータを返すメソッドのこと
ググってみたがほとんど用例が見つからん。
ググってみたがほとんど用例が見つからん。
287デフォルトの名無しさん
2021/12/29(水) 14:15:53.78ID:cOaqDcVM ばっかもーん!それがイテレータだ!定義しろ〜!
みたいな
みたいな
288デフォルトの名無しさん
2021/12/29(水) 15:32:20.47ID:mnKs3jeD289デフォルトの名無しさん
2021/12/29(水) 17:12:35.25ID:EOas9tnv 発信イテレータ<Item=オレオレ定義>
290デフォルトの名無しさん
2021/12/29(水) 21:23:30.19ID:4Vgx4jRv たしかに「イテレータメソッド」だと「イテレータ生成メソッド」を意味する用例もあり曖昧さがある
「の」を入れて「イテレータのメソッド」とした方がいいだろう
(A) イテレータ
trait Iteratorを実装するもの
コード上で「impl Iterator for 各イテレータが返す型」となって現れる
各イテレータが返す型は通常structでありimpl Iterator<Item=T>を満たす
メソッドとしてnext()を持ちこれがOption<T>を返す
(B) イテレータのメソッド
イテレータのメソッドとして機能するもの
コード上では「impl 宣言用トレイト for Iterator」の中で現れる
イテレータの各メソッドが返す型は任意でありfor_each()のように無しも可
対象イテレータのnext()を利用する側となる
「の」を入れて「イテレータのメソッド」とした方がいいだろう
(A) イテレータ
trait Iteratorを実装するもの
コード上で「impl Iterator for 各イテレータが返す型」となって現れる
各イテレータが返す型は通常structでありimpl Iterator<Item=T>を満たす
メソッドとしてnext()を持ちこれがOption<T>を返す
(B) イテレータのメソッド
イテレータのメソッドとして機能するもの
コード上では「impl 宣言用トレイト for Iterator」の中で現れる
イテレータの各メソッドが返す型は任意でありfor_each()のように無しも可
対象イテレータのnext()を利用する側となる
291デフォルトの名無しさん
2021/12/29(水) 21:25:05.27ID:4Vgx4jRv // 例: イテレータ CountUp
struct CountUp(isize);
impl Iterator for CountUp {
type Item = isize;
fn next(&mut self) -> Option<isize> {
self.0 += 1;
Some(self.0)
}
}
// 例: イテレータのメソッド average()
trait AverageMethod {
fn average(&mut self) -> isize;
}
impl<I: Iterator<Item=isize>> AverageMethod for I {
fn average(&mut self) -> isize {
let mut len = 0;
let mut sum = 0;
while let Some(n) = self.next() {
len += 1;
sum += n;
}
sum / len
}
}
fn main() {
let a = CountUp(0).take(99).average();
assert_eq!(a, 50);
}
struct CountUp(isize);
impl Iterator for CountUp {
type Item = isize;
fn next(&mut self) -> Option<isize> {
self.0 += 1;
Some(self.0)
}
}
// 例: イテレータのメソッド average()
trait AverageMethod {
fn average(&mut self) -> isize;
}
impl<I: Iterator<Item=isize>> AverageMethod for I {
fn average(&mut self) -> isize {
let mut len = 0;
let mut sum = 0;
while let Some(n) = self.next() {
len += 1;
sum += n;
}
sum / len
}
}
fn main() {
let a = CountUp(0).take(99).average();
assert_eq!(a, 50);
}
292デフォルトの名無しさん
2021/12/30(木) 00:04:05.78ID:MoU6yrVg 反応がないとうんこしたと流してない。不安に襲われるような感じ
293デフォルトの名無しさん
2021/12/30(木) 14:31:45.54ID:Qz6d/gAR >>291のイテレーターとメソッドをCやC++で実装することも可能ですか?
どんな感じのコードになりますか?
どんな感じのコードになりますか?
294デフォルトの名無しさん
2021/12/30(木) 22:06:33.40ID:uQWTVZvM Rustを勧めるとだけ言っておく
295デフォルトの名無しさん
2021/12/31(金) 05:37:35.76ID:FgwbS9xc ここにいるRust屋はC/C++が書けないってことがはっきりしている
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 自民・麻生太郎副総裁 石破政権の1年は「どよーん」 高市政権発足で「何となく明るくなった」「世の中のことが決まり動いている」★2 [Hitzeschleier★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- 【山形】クマ駆除で誤射した猟友会隊員に町が1663万円請求へ...弾当たり男性大けが2023年 小国町 [nita★]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- 官僚「台湾有事についての質問か、『政府として逐一答えない』と…(カタカタカタ)」高市「私1人で答弁できるわよ!」 [972432215]
- 【悲報】麻生太郎さん、オムツをしていた。晋さん…ここにいたんだね… [731544683]
