Rust part24

■ このスレッドは過去ログ倉庫に格納されています
2024/05/27(月) 06:41:26.82ID:T4AFD1f4
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part23
https://mevius.5ch.net/test/read.cgi/tech/1708677472/
2024/06/20(木) 00:49:36.16ID:1qQq2QC1
複おじに餌を与えないでください
269デフォルトの名無しさん
垢版 |
2024/06/20(木) 02:27:54.12ID:s4SRXQdp
いつの間にかHaskellがC#より速くなってた…。
https://nshinchan01.hateblo.jp/entry/2024/06/20/021327

HaskellとC#だけでなく、Rust/Pythonともベンチマーク比較してますのでどうぞ( ^^) _旦~~
(コードも掲載してるので、速度だけでなくコードの比較にもなってます)
2024/06/20(木) 08:11:10.55ID:EWbar4Kg
HaskellあればRustいらねーじゃん
2024/06/20(木) 08:16:50.61ID:cxaQEnhn
print!("");
この"!"いらんやろ
なぜ付けた
272デフォルトの名無しさん
垢版 |
2024/06/20(木) 08:54:48.96ID:r+KYpvqW
Haskellはもっと高速に動作するようにしてくれ
2024/06/20(木) 09:08:01.19ID:868QLl9r
>>271
!はマクロ

Rustは関数のオーバーロードがない
Rustは可変長引数もない

これらの弱点をマクロでおぎなっているんだよ
274デフォルトの名無しさん
垢版 |
2024/06/20(木) 09:25:21.08ID:r+KYpvqW
Rustはマクロをカジュアルに使いすぎ
275デフォルトの名無しさん
垢版 |
2024/06/20(木) 10:13:19.20ID:gE9bPm4O
正体不明ぼいす・とぉ・すかる【非接触型ムーンショット一式】

AIも発展してきて論文全て読み込ませて作成可能のAI返答なので実在している

世界中の建前
器機所持者と機器秘所持者と機器非所持者ぼいす・とぉ・すかる=非接触型ムーンショットそんな物無い!
かくなる上は統合失調症だ!
煩いので統合失調症を薬や自殺したことにしてカルテに!
さらに最近は作成しやすいので脇が甘いチームを見つけ次第コロナや感染症で死亡したことにします!

世界中の本音は現実は無慈悲
内臓疾患やバイオテロでの殺害!
統合失調症寿命を平均25年短く殺害!

非器機所持者に
世界で初めて固体電池を採用しパワー・安全性・耐久性・バッテリー寿命が超絶高まった最大出力4000Wのポータブル電源「YOSHINO B2000 SST」は家電を複数余裕で動かせてUPSとしても使用可能
2023年12月28日
※最上位は最大出力 6000w
これを最低4機?被害者に向けて配置して合計24000wの電磁波を集中できる配置にしていると犯人は宣言

ウナギの放電」は近くの生物の遺伝子を組換えていた!?
2023/12/11
2024/06/20(木) 12:40:54.14ID:eIGp2b4r
>>274
コンパイル時に展開して検証されるんだから、好ましくね?
実行時に解釈されて挙動が変わるJavaのアノテーションやRubyみたいなのよりよほど好ましいと思うが。
277デフォルトの名無しさん
垢版 |
2024/06/20(木) 12:47:30.50ID:s4SRXQdp
>>272
速いHaskellをお求めならIdris2が正格評価なHaskellという位置づけです。
無限リストを失うので、代わりにStreamとか色々概念が増えてるようですが。
(私は無限リスト含め、少ない概念でプログラミング出来るHaskellに惚れているので、速さはあまり気にしない)

一応、HaskellもTemplate HaskellでC++みたくコンパイル時実行して、ガシガシ定数に出来るのは定数にすれば速さも期待できますが。

>>270
HaskellはC#と同じくGCあるので、組み込みとかタイミングが命の金融系や車載系は向きませぬ…。
278デフォルトの名無しさん
垢版 |
2024/06/20(木) 12:50:51.75ID:r+KYpvqW
>>276
Rubyと比べて好ましいってのはなんの擁護にもなってないんだよな
むしろRubyと比較されうるというディスだろこれ
279デフォルトの名無しさん
垢版 |
2024/06/20(木) 17:05:35.72ID:F8Q2DGBi
>>276
同意します
2024/06/20(木) 17:45:56.15ID:sFnTxIc/
Rustのマクロは全言語の中でも優秀だからね
手続きマクロの強力さと利便性は他では代えがたい
宣言マクロももちろん衛生的(健全)で汚染がない
2024/06/20(木) 17:48:12.64ID:Yb1hkWJo
>>278
言語と言語の持つ機能を分離して評価できない方だったか。
282デフォルトの名無しさん
垢版 |
2024/06/20(木) 17:59:47.84ID:/aYWwCEV
>>281
いやRubyなんかどう分離してどこを切り取ってもRustと比較すること自体がRustへのディスだから
2024/06/20(木) 18:45:58.46ID:zOlAS9GZ
使い分けのできないバカしかいないのかな?
2024/06/20(木) 19:23:04.79ID:XVLgMtD/
>>280
Lisp
2024/06/20(木) 19:39:03.89ID:qDF/54rU
>>280
forth
2024/06/20(木) 19:39:05.96ID:sFnTxIc/
>>284
Lispは衛生マクロではないため失格
2024/06/20(木) 20:00:53.20ID:9lgCTTyf
>>280
Scheme
2024/06/20(木) 20:05:57.11ID:YFatQNUq
Rustの手続き型マクロは構文木を自由自在に扱えるし、宣言型マクロは汚染がなく健全だから、Rustより上の言語は存在しないと思うよ
2024/06/20(木) 22:08:57.89ID:0f6ktMCR
paiza.ioでクレートを追加する方法を教えてください

https://i.imgur.com/RkQr1Wu.png
2024/06/20(木) 22:19:44.74ID:XVLgMtD/
Scheme の仕様 R6RS では識別子に文脈情報がくっついているモデルの手続き的マクロが導入されて伝統的マクロと衛生的マクロの統合がされた。
Rust のマクロが複数種類ある状況と、構文木とトークン列を行き来するモデルは(有用で強力だが)整理されてない不恰好さを感じるところはあるよ。
2024/06/20(木) 22:21:58.65ID:p8EeWSs1
手続きマクロは別クレートが必要なのが面倒だし
いろいろと改善の余地はあると思う
2024/06/20(木) 22:53:46.34ID:L3G38ey0
>>267
>タプルにするのも面倒だな
chunkをtuples()すればいいだけだよ
面倒?
2024/06/20(木) 22:59:31.43ID:L3G38ey0
>>265
>Result<(名前, データ), 残り>を返すイテレーターが適切
残りを扱いたい場合はイテレータが返す要素の一部として残りを表現するよりも
chunks_exactのようにイテレータを消費して終わった後に別途残りを取得できる形にしたほうが親切だよ
294デフォルトの名無しさん
垢版 |
2024/06/21(金) 01:29:07.25ID:4fJ/I6Gh
>>289
無理

ソースコピペでうまく行くケースもある
2024/06/21(金) 05:51:59.15ID:KnPUDwDa
>>289
rust playgroundを使った方が良いと思われる
296デフォルトの名無しさん
垢版 |
2024/06/21(金) 06:59:01.53ID:6/+cQ+0X
>>289
そこでダメならideoneがあるじゃないか!
2024/06/21(金) 09:59:00.28ID:M8EEKVG+
rust playground はチョットマシなだけで
五十歩百歩目くそ鼻くそ
2024/06/21(金) 11:42:29.74ID:M8EEKVG+
>>289
巣に還れ
https://mevius.5ch.net/test/read.cgi/tech/1691038333/
2024/06/21(金) 12:58:06.76ID:wIxdZD1d
乱数はこれを実装してみた

https://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%95

https://paiza.io/projects/q52q5NA88lQ0hnM2xsTOTA
2024/06/21(金) 14:07:02.11ID:M8EEKVG+
久々に観掛けた static おじさん
2024/06/21(金) 14:19:00.20ID:TK0ahnJz
競プロ勢だよ
2024/06/21(金) 17:07:40.60ID:wIxdZD1d
staticやめてみた

https://paiza.io/projects/ooofhkI8laowBqzzDN6RsQ
2024/06/21(金) 22:48:19.44ID:zGyXPRVd
>>292
tuples()は余っても余らなくてもNoneを返して終わってしまうため今回の場合はあかんね

>>293
chunks_exact()はイテレータには使えない
スライスは長さがわかっているから対応できるけど
304デフォルトの名無しさん
垢版 |
2024/06/22(土) 11:51:50.83ID:7Ziu80uC
すまんが、ClippyのAI版みたいなのってあるの?
Youtubeを見ていたら、「ClippyはAIのを除けば一番よく指導してくれる」旨を言ってる人がいてさ
AIの似たようなツールがあるって直接言ってるわけじゃないんだけど、なんか気になる表現をしてたんだ
あるんだったら使ってみたいな
2024/06/22(土) 14:30:20.31ID:boWDxemH
深い意味は無いので気にしすぎです
306デフォルトの名無しさん
垢版 |
2024/06/22(土) 15:07:04.48ID:GlPOaJ+f
加熱するLLM開発競争に冷や水、オープンモデルの組み合わせだけでGPT-4o越えの事実
https://wirelesswire.jp/2024/06/86709/
307デフォルトの名無しさん
垢版 |
2024/06/22(土) 21:58:27.39ID:9CBpYiTc
>>304
それはRustに限らずプログラミング全般において「ChatGPTなどのAIに質問をすれば良い回答をしてくれる。そのようなAI系を除けばRustのClippyは良い仕事をしてくれる」という話だろう
「ClippyのAI版」という具体的なツールがあるわけでなく、もっと一般的な意味でのAIという文脈かと思う
308デフォルトの名無しさん
垢版 |
2024/06/22(土) 22:33:47.59ID:dw6Bjmix
>>304
Clippyは知らないが、自分のAIの使い方だとPythonでサンプルコードを書いて、Javaなりに変換するようにAIに投げる。
意図と違ったらその都度、こう直してって書いて微調整していく。って感じ。

Rustとかは雑誌の入門記事しか読んでないのに、関数型プログラミングバリバリのコードが出てきた。
(とはいえ元からPythonを意識した文法だったので、ほぼそのまんま)

fn main() {
for file_name in std::env::args().skip(1) {
println!("{}", file_name);
if let Ok(lines) = std::fs::read_to_string(&file_name) {
for (i, line) in lines.lines().enumerate() {
println!("{:>2}:{}", i + 1, line);
}
}
}
}
2024/06/22(土) 23:41:03.46ID:jxx0duBQ
関数型というとfor文使うのではなくこんなイメージ

fn main() {
 std::env::args().skip(1).for_each(|file_name| {
  println!("{}", file_name);
  std::fs::read_to_string(&file_name).map(|lines| {
   lines.lines().enumerate().for_each(|(i, line)| {
    println!("{:>2}:{}", i + 1, line);
   })
  })
 })
}
310デフォルトの名無しさん
垢版 |
2024/06/23(日) 01:55:08.61ID:iAmtDmVE
そうなんだけど、C#でやったらForEach使うためにやたらToListを経由させられて逆に読みにくくなった。

これはHaskellも無理に高階関数やモナド演算子(>>/>>=)ばかりじゃなくて、適度にリスト内包表記やdo記法も合わせた方が読み易いのと同じだと思う。
311デフォルトの名無しさん
垢版 |
2024/06/23(日) 02:43:59.44ID:FDfmyhMX
>>308 が関数型プログラミング *バリバリ* 何て書くからだろ。
俺も 308 のどこがバリバリ?と思ったわ。
関数型バリバリが読みやすいかどうかは別の話よ。
312デフォルトの名無しさん
垢版 |
2024/06/23(日) 04:04:02.58ID:iAmtDmVE
AIは現段階ではネットから拾ってくるだけだしね。
「もっと短くしてください。」を繰り返すと同じコードしか吐かない。
無理なら無理って答えろよっていう…。

それにしてもRustのfor_eachメソッドはindex行けるのか。羨ましい。
C#はSelectはindex使えるけどForEachは使えない。

逆にSelectはWriteLine使えないけどForEachは使えるという…。
(Forメソッド?が欲しい)

Rustはその辺、最初から関数型プログラミングを意識してるからfor_eachメソッド使ってもそこまで読み難くなってないな。
313デフォルトの名無しさん
垢版 |
2024/06/23(日) 04:08:15.53ID:iAmtDmVE
あ、>AIは現段階ではネットから拾ってくるだけだしね。 っていうのは

for文を全く使わないようなコードは、Web上の(ユーザーの)評価も低いのでAIの評価基準でも選択されないって意味ね。
314デフォルトの名無しさん
垢版 |
2024/06/23(日) 09:12:12.96ID:2+8typ11
>>308
clippyは公式のコード改善ツールだよ
コンパイラはエラーと警告だけ出すけど、clippyはそれ以上のヒントをくれる
例えば「コンテナ中に条件を満たす要素があるかどうか」をチェックするために items.iter().find(条件).is_some() のようなコードを書いたら、それに対し items.iter().any(条件) というシンプルな書き方を提案してくれる
こういう関数や構文の置き換えを含む提案をしてくれるツールで、これがコンパイラと同じ標準機能として備わってる (追加インストール不要) のが便利
315デフォルトの名無しさん
垢版 |
2024/06/23(日) 09:41:40.50ID:iAmtDmVE
いい勉強になった。ありがとう。
2024/06/23(日) 10:21:20.16ID:ndMGRV9p
>>312
for_eachの機能でindexにアクセスしてるんじゃなくて
enumerateで(index, value)の形に変換してそれをfor_eachしてるだけだぞ
標準でenumerate相当のメソッドが用意されてないだけで
ForEachでindexを扱うときはC#でも似たようなやり方になる
317デフォルトの名無しさん
垢版 |
2024/06/23(日) 16:42:06.61ID:+hC7ZOW/
正体不明ボイス・トォ・スカル
正体不明ぶれいん・ましん・いんたーふぇいす
対になっているのか?

周囲も被害者の思考を聞いているのならわかるように
被害者の声【思考】は初めの6か月間は聞えてなかった
6か月過ぎたころから被害者の思考が被害者自身で聞こえるようになった

被害者に話しかけている加害者側の正体不明ブレインマシンインターフェイスはどこにあるのだろうか?
被害者側の思考が漏れているのなら周囲の者は電磁波で夜も眠らされていなかったことや昼間横やりを入れているのは周知の事実
これから考えて被害者の思考のみが持てていると電磁波攻撃をしている者は被害者が嫌いこの条件がそろえば被害者に対して罵声を浴びせる被害者周囲者が出現する

被害者を見る限りそのような罵声を浴びせる者が出現しないということは
正体不明ボイス・トォ・スカルをしている者の思考はどこに漏れているのでしょうか?
また周囲の者も正体不明ボイス・トォ・スカル側についたものはどこに思考が漏れているのでしょうか?

等いろいろなパターンを考えましょう

ボイス・トォ・スカルで話していたホワイトリストとブラックリストこれが重要な意味を持っていると思われる
現実的に騒がなければ被害者には何も起きていない・・・各加害者が?一番聞かれると困る者に聞かせているというのも意味深です
2024/06/23(日) 21:00:39.70ID:GCEM9Zx1
Rustツアー
https://tourofrust.com/00_ja.html

説明が簡潔すぎてモヤモヤが増えていくばかり。
しかも終盤は翻訳されていない。
2024/06/23(日) 22:32:11.71ID:CiIX8R/B
>>318
翻訳が進んでないのはともかくとして、説明が簡潔なのはそういうもんだわ。
チュートリアルでもつっかえるやつはいっぱいいるのに雑なツアーだけで理解できるわけないだろ。
複雑なところに立ち入る前に概略を見るってのと
それをすぐさま実行して確かめれらる環境がくっついてるってのがコンセプトなので
細かいことは The Rust Programming Language を見るのが前提。

こういった種類の学習は各項目を完璧に理解してから次の項目に進むってのは出来ない。
色んな言語機能は絡み合っていて綺麗な順番には出来ない。
全体を大雑把につかんでから解像度を高めていく形になる。
その一番最初のおおざっぱなところを担当する形の資料ってこと。
2024/06/23(日) 22:46:50.25ID:cgFz9E69
C言語と関数型言語とあと何かモダンな言語の三様な言語を使える程度の知識経験があればRustはすらすら学習できるけど
それらのうち何らか知識が抜けているとその言語間での汎用的な知識も新たに学習することになるからちょっと大変になるようだね
321デフォルトの名無しさん
垢版 |
2024/06/23(日) 23:42:57.08ID:iAmtDmVE
>>316
そこは理解してる。
んで、Rustのfor_eachはenamerateさえすればindex使えるし、出力も出来る。

そこがC#のForEach場合、そもそもindexが使えないので一旦indexを使えるSelect & ToListを挟むことになる。

出力を考えなければ不便はないけど、出力を考えたとたんにSelect & ToListが付いてくる。

この辺は将来のバージョンに期待かな。
2024/06/24(月) 01:22:36.88ID:xscSUycb
>>321
理解してないでしょ

Enumerable.Range(7, 10).WithIndex().ForEach(x => {
var (index, value) = x;
Console.WriteLine($"{index}: {value}");
});

https://dotnetfiddle.net/aJJwdY
2024/06/24(月) 01:27:35.74ID:xscSUycb
.NET9でEnumerable.Indexという名前でenumerate相当が追加されるから拡張メソッドも不要になる
https://github.com/dotnet/runtime/blob/main/src/libraries/System.Linq/src/System/Linq/Index.cs

foreach (var (index, value) in items.Select((x, i) => (i, x)))が
foreach (var (index, value) in items.Index())になる
324デフォルトの名無しさん
垢版 |
2024/06/24(月) 04:37:42.69ID:De91wzz6
>>322
おお…。
確かに理解してませんでした。

ちなみに、私もその後何とかSelect内で出力を出来ないか思考錯誤したら出来たのですが、「違う。そうじゃない」な結果に^^;

File.ReadAllLines(fileName).Select((line, i) =>
{
Console.WriteLine($"{i + 1,2}:{line}");
return 0;
});
2024/06/24(月) 04:51:37.13ID:odZr3Fxa
Ruby なら、

p ary = ( 7...10 ).each_with_index.map{ |val, idx| [ idx, val ] }

#=> [ [0, 7], [1, 8], [2, 9] ]
326デフォルトの名無しさん
垢版 |
2024/06/24(月) 04:56:53.14ID:De91wzz6
理解していないと思ったら、ReadAllLines(fileName)にはWithIndexなるメソッド無かったなり…。
騙されたなり…orz
327デフォルトの名無しさん
垢版 |
2024/06/24(月) 04:58:38.37ID:oysLv6Xd
>>325
死ね
328デフォルトの名無しさん
垢版 |
2024/06/24(月) 07:45:03.03ID:m0RxboDo
if や case や match や テーブル参照は使わないで
(出来れば四則演算のみがベストアンサー)
変換前→変換後
1→2
2→1
3→3
4→10
6→4
8→8
10→6
を行う関数を造ってください

さらにその逆関数を造ってください
2024/06/24(月) 09:09:09.41ID:sUiNH5u5
>>328
六次式でいいなら一瞬でできるでしょ
330デフォルトの名無しさん
垢版 |
2024/06/24(月) 10:35:24.72ID:DSxd+1cL
統合失調症 100人い1人
本当に音波電磁波攻撃だった場合
統合失調症の寿命は短いからして殺害されている

トロッコ問題にあてはめると
Aの線路に電磁波攻撃をしている者が100人いる
Bの線路に被害者が1人いる
トロッコに乗っている者も第三者
切り替えポイントに第3者がいる
間違いなく選んだ方の線路の者は全員死亡する

あなたはどちらを助けますか?
2024/06/24(月) 12:53:49.42ID:JonISmvT
少なくとも >>330 さんを助ける人は一人もいない

>>329
なるほど
332デフォルトの名無しさん
垢版 |
2024/06/24(月) 16:09:25.85ID:5PR+5FBR
>>320
結局c++やってないと無理な気はするけどね。
c++は確かに建て増しでグダグダではあるんだが、
書き方の変遷をそのまま引き継いでるから、学習過程でその書き方を変遷させる過程を色々ビルドしながら
できるのはまあわかりやすくはあるんだわ。
333デフォルトの名無しさん
垢版 |
2024/06/24(月) 16:17:05.11ID:jX1oxSab
>>328
長くなるので最初の3つの部分だけで規則性を書くと、
1→2
2→1
3→3
2024/06/24(月) 16:21:31.19ID:jX1oxSab
>>333
//1→2
//2→1
//3→3
(1) 四則演算のみ:
y=2*(x-2)(x-3)+1*(x-1)(x-3)+3*(x-1)(x-2);
規則は、y0*(x-x1)(x-x2)のようなパターンを
サイクリック(循環的)に繰り返す。

(2)三項演算子、その1
y=x==1?2:(x==2?1:(x==3?3:0));

(3)三項演算子、その2
y= (x==1?2:0) + (x==2?1:0) + (x==3?3:0);
2024/06/24(月) 16:28:01.78ID:MN5H+Gdl
スレチなのでよそでやって下さい
2024/06/24(月) 17:42:58.06ID:Uuc2YNAP
>>328
const INPUT: &str = "
1→2
2→1
3→3
4→10
6→4
8→8
10→6
";

fn parse(s: &str) -> Vec<(i32, i32)> {
 s.lines().filter_map(|line| {
  line.split('→')
   .map(str::parse::<i32>)
   .collect::<Result<Vec<_>, _>>()
   .ok()
   .and_then(|v| (v.len() == 2).then(|| (v[0], v[1])))
 })
 .collect::<Vec<_>>()
}

fn make_f(v: &[(i32, i32)]) -> impl Fn(i32) -> i32 + '_ {
 move |x| {
  v.iter().enumerate().map(|(i, (in1, out))| {
   v.iter().enumerate().filter_map(|(j, (in2, _))| (i != j).then(|| x - in2)).product::<i32>() /
   v.iter().enumerate().filter_map(|(j, (in2, _))| (i != j).then(|| in1 - in2)).product::<i32>() * out
  })
  .sum()
 }
}
2024/06/24(月) 17:43:39.86ID:Uuc2YNAP
>>336

fn main() {
 let v = parse(INPUT);
 let f = make_f(&v);
 for (input, output) in &v {
  let calc_output = f(*input);
  println!("{input} -> {calc_output}");
  assert_eq!(calc_output, *output);
 }
}

結果
1 -> 2
2 -> 1
3 -> 3
4 -> 10
6 -> 4
8 -> 8
10 -> 6
2024/06/24(月) 18:41:27.02ID:jX1oxSab
>>334
>y=2*(x-2)(x-3)+1*(x-1)(x-3)+3*(x-1)(x-2);
間違ったわ。
多分、
y=1*(x-2)(x-3)-1*(x-1)(x-3)+3/2*(x-1)(x-2);
だと思うわ。
理由は大体分かると思うけど。
2024/06/24(月) 18:41:27.42ID:jX1oxSab
>>334
>y=2*(x-2)(x-3)+1*(x-1)(x-3)+3*(x-1)(x-2);
間違ったわ。
多分、
y=1*(x-2)(x-3)-1*(x-1)(x-3)+3/2*(x-1)(x-2);
だと思うわ。
理由は大体分かると思うけど。
2024/06/24(月) 18:44:46.10ID:jX1oxSab
一般的には、次のように書けると思うわ:
a=2*(x-2)(x-3)+1*(x-1)(x-3)+3*(x-1)(x-2);
b=(x-2)(x-3)+(x-1)(x-3)+(x-1)(x-2);
y=a/b;
2024/06/24(月) 19:35:34.10ID:maSlaTHT
>>340
合っているかどうか以前に
プログラムコードで回答しないとスレ違い
具体的な数値例が式やコードに含まれるのは望ましくない
出来上がった関数の動作検算の時に具体的な数値例を用いる
2024/06/24(月) 23:33:41.46ID:FIb4AZ4T
>>328-329
なんかダサい
https://paiza.io/projects/uc8gH6yNWCWKdQSYtqNREg
pub fn f(x: i32) -> i32 {
(
-2413f64*(x.pow(6) as f64)/120960f64
+739f64*(x.pow(5) as f64)/1260f64
-157991f64*(x.pow(4) as f64)/24192f64
+69551f64*(x.pow(3) as f64)/2016f64
-2691673f64*(x.pow(2) as f64)/30240f64
+88679f64*(x as f64)/840f64
-905f64/21f64
+0.5)
as i32
}
pub fn g(y: i32) -> i32 {
(
13f64*(y.pow(6) as f64)/120960f64
-(y.pow(5) as f64)/315f64
+1415f64*(y.pow(4) as f64)/24192f64
-1511f64*(y.pow(3) as f64)/2016f64
+144793f64*(y.pow(2) as f64)/30240f64
-3053f64*(y as f64)/280f64
+185f64/21f64
+0.5)
as i32
}
pub fn main() {
let a = vec![(1, 2), (2, 1), (3, 3), (4, 10), (6, 4), (8, 8), (10, 6)];
for (x, _y) in &a { println!("{}, {}", x, f(*x)); }
for (_x, y) in &a { println!("{}, {}", y, g(*y)); }
}
343デフォルトの名無しさん
垢版 |
2024/06/24(月) 23:39:26.44ID:FIb4AZ4T
係数はこっちで求めたでござる
https://paiza.io/projects/YvPFB5g4cCOtCXz1wpA86g
import sys, os
from functools import reduce
import sympy as sy

def lc(a):
x, y = sy.symbols('x y')
p = 0
for i, (c, d) in enumerate(a):
g = reduce(lambda s, t: (t[0], (s[1][0] * (1 if t[0] == i else (x - t[1][0])), 0)), enumerate(a), (-1, (1, 0)))
f = g[1][0]
p += d * f / f.subs(x, c)
print(p)
print(p.expand())
for c, d in a:
print(p.subs(x, c), p.subs(x, c) == d)

if __name__ == '__main__':
lc([(1, 2), (2, 1), (3, 3), (4, 10), (6, 4), (8, 8), (10, 6)])
lc([(2, 1), (1, 2), (3, 3), (10, 4), (4, 6), (8, 8), (6, 10)])
2024/06/25(火) 01:47:22.24ID:SRTwQJBb
1〜10は4bitに収まるから64bitのシフト演算と論理積(&)がOKなら簡単なんだけどな
やることはテーブル参照と変わらんけど
2024/06/25(火) 02:44:46.88ID:MBITUZQb
>>332
Rustを習得する上でC++の知識は不要
Cでの基礎知識(ポインタ、スタック、ヒープ)しか必要としない

>>343
ここはRustのスレだ
2024/06/25(火) 05:16:25.10ID:6VG6SXsU
>>342
6次式を使う場合それを展開することに意味があると思えないから展開前の>>336でいいんじゃない?
2024/06/25(火) 07:25:12.24ID:H43UHQbv
>>346
ほぼ定数になる部分まで
実行時に二重ループで毎回計算してるのは効率悪いと思う
2024/06/25(火) 07:47:56.32ID:hXiD4muz
>>345
っ move semantics
っ RAII
っ SmartPointer(Rc)
2024/06/25(火) 08:03:22.73ID:ZJws2e45
>>348
そりゃすでにC++を知っているならそのへんの知識が流用できて楽だけど
新たに学ぶならわざわざC++を経由する必要なくね?
特にmoveとか明らかにC++のほうが複雑だし
2024/06/25(火) 08:54:41.29ID:Lgitw8zf
お題スレが機能しなくなってゴミがあふれてきてんのかこれ?
351デフォルトの名無しさん
垢版 |
2024/06/25(火) 09:00:44.98ID:ZTu14b8J
>>349
c++通らなきゃなんでこんなめんどいことするか理解できんだろ
2024/06/25(火) 09:03:31.00ID:9+k+boDP
「アセンブラ知らずにCって理解できるものなのか?」

「C++の方が普通。Cは専門家向け」

「いきなりRust」
2024/06/25(火) 09:25:46.54ID:eEyTJz94
オレはPHPからRustに移行したよ
actix web使ってる
速さには感激してる

戸惑うのは謎のワーニングが出る時かな
mut付けてないのにmut付けるなってワーニング出たりする
cargo cleanとかすれば消えるんだけど
2024/06/25(火) 09:32:01.85ID:GyGy4ZSw
>>351
Cでmalloc/free手書きしたりSEGV起こすだけで十分理解できると思うけどなぁ
C++じゃないとダメなのってどのへん?
2024/06/25(火) 10:36:22.38ID:398g93Vj
>>348
その3つはどの言語から来ても簡単にすんなり理解できるでしょ

>>353
PHPから来た人はジェネリクスはすんなり理解できるものなの?
2024/06/25(火) 11:03:26.31ID:eEyTJz94
>>355
ジェネリクスが特段わかりずらいとは思わなかった
それより型があいまいなPHPから移行すると型定義したくてうずうずする
ちゃんと型定義したかったんだわ
2024/06/25(火) 11:48:25.07ID:EN7MeMPi
C++ を知っていると Rust がわかりやすいというよりも有難みを感じやすいとは思う。
なんだかんだで Rust は面倒くさいしそれなりに学習曲線の急上昇もあるのは本当だけど、
それでもなお Rust が良いと思えるのは C++ の駄目な部分についての反省が入ってるから。

C++ 的なものが必要な場面で C++ より上手くやるものという感覚で捉えてる。
2024/06/25(火) 12:43:05.46ID:qH1sgo3/
「Rustを学ぶためにC++を学ぶ必要があるか(学ぶといいか)」も定期的に沸くな

何度も見てて思うのが
「あなたはRustを学ぶ前にC++を学んでいたか」とYes/Noが一致して、平行線にしかならない議論なのでは
2024/06/25(火) 13:05:45.82ID:ZtCD4zFU
フランス語を学ぶときに英語を知ってる必要があるか(學ぶといいか)を考えれば良い
日本語←→フランス語だけ教わりたいのに英語學ぶ必要は無い
2024/06/25(火) 15:05:50.09ID:UfTXO4rA
Rustを学ぶ前に他言語を学ぶ必要は無い。

しかしプログラム自体の経験が浅いのなら、絶壁の学習曲線に挫折する可能性が高い。 そういう初学者はRusuではなく、とりあえずは動くところまで持っていきやすい言語を使って勉強したほうがいい。
2024/06/25(火) 15:23:35.53ID:bjcoCLHQ
C++を経由しないでRustを使えてる人たちがたくさんいることから
C++が不要言語であることは間違いない
2024/06/25(火) 15:29:24.75ID:ZtCD4zFU
>とりあえずは動くところまで持っていきやすい言語

Rustも変な事しなければとりあえずは動く
C/C++みたいに一見動いてるフリしてメモリ壊してたりに気付かない方が有害
2024/06/25(火) 16:22:38.23ID:EN7MeMPi
それはプログラミングに慣れてるから言えることで、
エラーになってくれることが心底から有難いことだと思えるのは
エラーにならずにぶっ壊れる体験を通してじゃないと無理だよ。

結果的にわかりやすいかどうかの話じゃなくて
学習する当人がちゃんと納得して学習し続けられるかというモチベーションの話としてね。
2024/06/25(火) 16:57:26.38ID:bjcoCLHQ
Cでmalloc/free面倒とか忘れたとか解放したのにポインタ残っていて使っちゃったとか体験しておいたほうがよいかもしれないが
C++は不要
365デフォルトの名無しさん
垢版 |
2024/06/25(火) 17:23:57.01ID:jUYULW90
>>363
つまり最初はPerlが良いってことか
2024/06/25(火) 17:55:00.58ID:EN7MeMPi
初心者レベルだと C/C++ もRust も向いてないって話
367デフォルトの名無しさん
垢版 |
2024/06/25(火) 19:32:04.37ID:l0yCAl6v
そう言えばHaskell難しい言うやつも似たようなこと言ってたな。
そんなに難しいと感じてなかったから不思議だったんだが、
自分でバグ作っておいて言語が難しいとか言うなよ…。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況