/* c */ #include <stdio.h> #define min(a, b) ((a) < (b) ? (a) : (b)) // スッキリ int min2(int a, int b) {return a < b ? a : b;} // ややスッキリ int min3(int a, int b) { if (a < b) return a; else return b; // スッキリ? } int main() { printf("%d ", min(3, 2)); printf("%d ", min2(3, 2)); printf("%d ", min3(3, 2)); return 0; }
// rust fn main() { let min = |a, b| if a < b {a} else {b}; // 中括弧が嫌 //let min = |a, b| if (a < b) a else b; // これならスッキリ //let min = |a, b| if a < b then a else b; // あるいはこれ println!("{}", min(3, 2)); }
(* ocaml *) let min a b = if a < b then a else b (* スッキリ *) let () = print_int (min 3 2) 0224デフォルトの名無しさん2020/09/26(土) 12:46:41.58ID:XnDuVG4Q はいはいdangling else dangling else 0225デフォルトの名無しさん2020/09/26(土) 13:01:32.24ID:nz56jET8 Goもそうだけど、条件式に括弧を使わないのがいまだに慣れない。 0226デフォルトの名無しさん2020/09/26(土) 13:49:35.37ID:Rxc/dJS+ BASIC は要らなかったから慣れてる。 3項演算子考えたやつは天才。 0227デフォルトの名無しさん2020/09/26(土) 14:34:05.78ID:d+bfMgei>>225 本文 (?) の波括弧が必須だから 条件式の範囲は自明 (視認性的に) だってことなんだろうな。 0228デフォルトの名無しさん2020/09/26(土) 14:40:21.79ID:Lg3GZEAb>>225 そのへんとモジュールまわりはPythonの影響かなと思った 0229デフォルトの名無しさん2020/09/26(土) 16:28:05.98ID:en54jqZM>>228 PythonというよりRubyだろね コアチームは過去も含めてRubyコミュニティ出身者が多いから
let min a b = if a < b then a else b (* letの直前だから;;省略 *) let () = print_int (min 3 2) (* ファイルの最後だから;;省略 *) 0255デフォルトの名無しさん2020/10/01(木) 14:03:33.62ID:WCPslwmj slice::windowsのstrバージョンみたいなのってないのでしょうか。 ようするにある文字列に含まれる連続するn文字を頭から順に返すイテレータを作ってくれるようなやつです。 0256デフォルトの名無しさん2020/10/01(木) 18:29:40.74ID:HHhjPj0U>>255 ないのでVec<char>を生成してwindowsを呼ぶとか
なんとなくグローバルに置いた変数もシャドーイングできそうなのですが実害は出たことありますか? 多分ないと思いますが… 0276デフォルトの名無しさん2020/10/20(火) 19:31:52.86ID:KPdri9BA Which Programming Languages Use the Least Electricity? https://thenewstack.io/which-programming-languages-use-the-least-electricity/ > Energy consumed Run-time > C 57J 2019 ms > Rust 59J 2103 ms > C++ 77J 3155 ms > Ada 98J 3740 ms > Java 114J 3821 ms 0277デフォルトの名無しさん2020/10/20(火) 20:46:27.74ID:7hmMXh1W デバッグやバグ修正に必要なエネルギーコストを加味したらCより効率よくなりそう 0278デフォルトの名無しさん2020/10/21(水) 02:18:21.88ID:Q9+kxPSM Rustはビルドでめっちゃ電力使うやろ 0279デフォルトの名無しさん2020/11/01(日) 07:27:17.14ID:an3UASXf let mut bt = (0..10).collect::<BTreeSet<_>>(); for e in bt.iter() {
let mut bt = (0..10).collect::<BTreeSet<_>>(); let mut temp = Vec::new() for e in bt.iter() { if e == Foo { temp.push(e); } // 削除予定のものをtempに入れる } for e in temp { bt.remove(&e); } 0280デフォルトの名無しさん2020/11/01(日) 11:33:15.11ID:lQA9Y5E+ let bt = (0..10).filter(|e| eが要るなら真).collect::<BtreeSet<_>>(); じゃあかんのか 0281デフォルトの名無しさん2020/11/01(日) 13:38:40.42ID:an3UASXf btがこの例のとおりのものならそれでいいんですけど、 いろんな状況でbtに要素が追加されるっていう感じです
あと、if e == Fooはちょっと雑すぎましたif is_xxx(e)とかのほうがよいです 0282デフォルトの名無しさん2020/11/01(日) 17:37:39.36ID:o3MRCmTo コンテナのイテレーターのループ回してる間にコンテナの要素を追加や削除は出来ない。これは他のコンテナ(Vecなど)でもそう。どうしてもやるなら内部実装を理解した上でunsafeな方法で。 「いろんな状況でbtに要素が追加される」がループ中なのか何なのか分からないのでどうしようもないが、 let bt = bt.into_iter().filter(|&e| e == foo).collect::<std::collections::BTreeSet<_>>(); で新たなbtを作るか、 もとのbtから要素を削除するにしても for e in bt.iter().filter(|&&e| e == foo).cloned().collect::<Vec<_>>() { bt.remove(&e); } などでもう少し簡潔に書ける。 0283デフォルトの名無しさん2020/11/01(日) 18:31:04.97ID:adfXjKjb BTreeSet::drain_filter が安定化されるのを待とう
ただ戻り値ポジションの場合は ジェネリックでは書き直せないから確実に違う 0303デフォルトの名無しさん2020/11/12(木) 18:49:52.91ID:C+/hhwIt 記号が多い言語は英語の苦手な日本人には有利だ 英文に近づけようとする言語は不利だ 0304デフォルトの名無しさん2020/11/13(金) 19:01:00.42ID:nD6TGu67 そんなあなたにPerlがあるよ 0305デフォルトの名無しさん2020/11/13(金) 23:39:03.73ID:RhbFV+AU APLもおるでよ 0306デフォルトの名無しさん2020/11/14(土) 06:16:49.16ID:6dxHy4Fn python最強じゃん 0307デフォルトの名無しさん2020/11/14(土) 09:55:40.26ID:B7e1nuZg LISPかな。まあ記号と言っても括弧ばっかりだが。 0308デフォルトの名無しさん2020/11/14(土) 10:07:50.72ID:DnZAmAgg 「Lots of Isolated Silly Parentheses」の略だからな。 0309デフォルトの名無しさん2020/11/14(土) 10:52:27.43ID:wQlu6eHI>>300 読んでて知ったけど::<T>のことturbofishっていうんだ かわいい 0310デフォルトの名無しさん2020/11/14(土) 12:17:47.68ID:dRjRf4O1 わかる https://turbo.fish0311デフォルトの名無しさん2020/11/14(土) 13:14:02.66ID:DnZAmAgg The name "turbofish" was made up by reddit user deadstone in 2015, and has since caught on in the Rust community, being used even in the official documentation. 「turbofish」という名前は、2015年にredditユーザーのdeadstone氏によって作成され、それ以来Rustコミュニティで定着し、公式ドキュメントでも使用されています。