探検
関数型プログラミング言語Haskell Part34
680デフォルトの名無しさん
2025/10/09(木) 17:36:59.11ID:jE8FE7Nk Cに何を求めてんだよw
681デフォルトの名無しさん
2025/10/09(木) 17:53:09.88ID:N3YUsGEr OS開発ですね。メモリも割り込みも何でも見えてしまい、扱わないといけません
682デフォルトの名無しさん
2025/10/09(木) 18:19:20.69ID:j1OYGPg+ >>678
にゃんと!?
それを押してもいざ実装してみたら
構造体で配列を包む場合、あらかじめ配列の長さを決めないといけなかった。
struct {
int array[1024];
int size;
}typedef Array;
この1024とかも余分な分は最適化で無くなるっていうなら10万位要素があっても大丈夫なように1GB位(見かけ上)確保したいが、そうでないなら大体の場合、無駄な領域を確保してることになる。
にゃんと!?
それを押してもいざ実装してみたら
構造体で配列を包む場合、あらかじめ配列の長さを決めないといけなかった。
struct {
int array[1024];
int size;
}typedef Array;
この1024とかも余分な分は最適化で無くなるっていうなら10万位要素があっても大丈夫なように1GB位(見かけ上)確保したいが、そうでないなら大体の場合、無駄な領域を確保してることになる。
683デフォルトの名無しさん
2025/10/09(木) 18:28:04.54ID:j1OYGPg+ >>678
ん、まてよ?
最適化で不要なコピーは消えるって言っても、関数プログラミングのmap関数と同じ動きなら、参照元の値は変わったらダメなので参照渡しされたら困るんだが、どんな最適化でコピー(値渡し)で無く、かつ参照渡しでもない状態ってどんな状態?
ん、まてよ?
最適化で不要なコピーは消えるって言っても、関数プログラミングのmap関数と同じ動きなら、参照元の値は変わったらダメなので参照渡しされたら困るんだが、どんな最適化でコピー(値渡し)で無く、かつ参照渡しでもない状態ってどんな状態?
684デフォルトの名無しさん
2025/10/09(木) 19:31:35.47ID:XykzCJ/G Haskellは遅延評価だからmapが配列を返してると言えるかあやしい
一般的な関数型言語だと末尾再帰で不必要になる値を再利用(上書き)する
あと値が変更されない(immutable)なら参照渡しで共有しても問題ないし
共有するためにimmutableにすると言っても過言ではない
一般的な関数型言語だと末尾再帰で不必要になる値を再利用(上書き)する
あと値が変更されない(immutable)なら参照渡しで共有しても問題ないし
共有するためにimmutableにすると言っても過言ではない
685デフォルトの名無しさん
2025/10/09(木) 19:50:16.02ID:j1OYGPg+ >>684
うん、遅延評価だから基本参照を返してるはず。バード本参照
(なので>>668を書いてみたわけで)
immutableなら
a = [1..4]
b = map (+1) [1..4]
print a
print b
とうコードで
output:
[0,1,2,3,4]
[1,2,3,4,5]
になるはず。
Cで参照を共有すると
[1,2,3,4,5]
[1,2,3,4,5]
という困った表示になってしまう。
というかHaskellでも生のリスト[0..4]とmap (+1) [0..4]は参照を共有してない。
共有してるのは[0..4]だけ。
(むしろ共有してないからこそ「富豪プログラミング」とか言われる)
うん、遅延評価だから基本参照を返してるはず。バード本参照
(なので>>668を書いてみたわけで)
immutableなら
a = [1..4]
b = map (+1) [1..4]
print a
print b
とうコードで
output:
[0,1,2,3,4]
[1,2,3,4,5]
になるはず。
Cで参照を共有すると
[1,2,3,4,5]
[1,2,3,4,5]
という困った表示になってしまう。
というかHaskellでも生のリスト[0..4]とmap (+1) [0..4]は参照を共有してない。
共有してるのは[0..4]だけ。
(むしろ共有してないからこそ「富豪プログラミング」とか言われる)
686デフォルトの名無しさん
2025/10/09(木) 20:01:16.79ID:j1OYGPg+ 言ってみればHaskellは新しい参照をどんどん生み出して、不要になった参照はガンガンGCする。
Cはそういうプログラミングには(当たり前だが)向かないし、当たり前にCの方が効率は良い。
人間が書くコードはHaskellみたく数学に近いほど短くなる。
どっちが良いとかじゃなく、何を優先するかという話。
(なのだなぁと、Cでmap関数もどきを書いて再確認した)
Cはそういうプログラミングには(当たり前だが)向かないし、当たり前にCの方が効率は良い。
人間が書くコードはHaskellみたく数学に近いほど短くなる。
どっちが良いとかじゃなく、何を優先するかという話。
(なのだなぁと、Cでmap関数もどきを書いて再確認した)
687デフォルトの名無しさん
2025/10/09(木) 20:33:26.39ID:N3YUsGEr ループ書こうぜ
688デフォルトの名無しさん
2025/10/09(木) 21:58:50.95ID:HS++2zZ0689デフォルトの名無しさん
2025/10/10(金) 05:32:34.82ID:WzZmvOuY Haskellを勉強したけど何に使えばいいのか分からない
関数型プログラミングで難しい割に、速度が出ないことがわかっているやっぱり速度は正義だろ
関数型プログラミングで難しい割に、速度が出ないことがわかっているやっぱり速度は正義だろ
690デフォルトの名無しさん
2025/10/10(金) 07:17:31.85ID:G/tXieG5 >>688
ジェネリックはそのうちC++なりJavaなりで試すけど、まだ試してもいないので…。
最適化の方はもうちょい具体的に教えて欲しいかも。
x = 2 * 100を x = 200にするみたいなのは知ってるけど、あんま詳しくない。
ジェネリックはそのうちC++なりJavaなりで試すけど、まだ試してもいないので…。
最適化の方はもうちょい具体的に教えて欲しいかも。
x = 2 * 100を x = 200にするみたいなのは知ってるけど、あんま詳しくない。
691デフォルトの名無しさん
2025/10/10(金) 07:21:42.77ID:G/tXieG5 >>689
今のHaskellは(中の人がMSに勤め始めてから)C#並みに速くなってるけど、GUIライブラリとか軒並み遅い時代に開発が止まってる…。
しいて言えばYesod使ってWebアプリかな?
Mac(Appleシリコン)版があるからiOSアプリのロジック部分とかも行けそう。
今のHaskellは(中の人がMSに勤め始めてから)C#並みに速くなってるけど、GUIライブラリとか軒並み遅い時代に開発が止まってる…。
しいて言えばYesod使ってWebアプリかな?
Mac(Appleシリコン)版があるからiOSアプリのロジック部分とかも行けそう。
692デフォルトの名無しさん
2025/10/10(金) 20:26:02.07ID:OD0KmsJp693デフォルトの名無しさん
2025/10/11(土) 22:42:46.58ID:pZv0dAV3 22 template <typename T>
23 vector<T> map(function<T(T)> f, const vector<T> arr){
24 vector<T> temp;
25 for(auto i : arr) temp.push_back(f(i));
26 return temp;
27 }
23 vector<T> map(function<T(T)> f, const vector<T> arr){
24 vector<T> temp;
25 for(auto i : arr) temp.push_back(f(i));
26 return temp;
27 }
694デフォルトの名無しさん
2025/10/11(土) 22:43:04.64ID:pZv0dAV3 C++で書いてみた。
今回は値渡しにしたけど、本当に最適化でコピーにならないようにできるのかな…。
そもそもどうやってそれを確認するんだろう?
本当なら参照渡しがほぼ要らなくなるけど。
そして、例によって参照渡しだと>>668やコードこそ書いてないがCで一般的な>>677のカッコ内に書いた(通常、それを避けるために結果を格納するためのポインタを引数で渡す)になる。
コードにするとこう。
(Haskellerなのでmapにしたけど、C++だとmapって連想配列なのね。失敗した…)
void map(vector<int>* input, vector<int>* output);
配列と比べて長さを引数に渡さないで良くなるのと、realocしなくても長さを変更できる点が進化しているが。
今回は値渡しにしたけど、本当に最適化でコピーにならないようにできるのかな…。
そもそもどうやってそれを確認するんだろう?
本当なら参照渡しがほぼ要らなくなるけど。
そして、例によって参照渡しだと>>668やコードこそ書いてないがCで一般的な>>677のカッコ内に書いた(通常、それを避けるために結果を格納するためのポインタを引数で渡す)になる。
コードにするとこう。
(Haskellerなのでmapにしたけど、C++だとmapって連想配列なのね。失敗した…)
void map(vector<int>* input, vector<int>* output);
配列と比べて長さを引数に渡さないで良くなるのと、realocしなくても長さを変更できる点が進化しているが。
レスを投稿する
ニュース
- H3ロケット8号機、打ち上げ後に「第2段エンジン早期に燃焼終了」 [少考さん★]
- 【速報】長期金利が一時2.050%に上昇。1999年2月以来、26年10カ月ぶり [蚤の市★]
- 【本】日本の「移民大国化」が止まらない…最新データが示す"永住型の労働移民は世界3位"という衝撃の現実 (是川 夕氏) [少考さん★]
- 鈴木農水相「自由にコメ作れば価格が暴落する」おこめ券はコメ価格に「ほとんど影響なし」 ★2 [Hitzeschleier★]
- 「さなえちゃんドレッシング」の女性強調に違和感… エプロン姿の高市首相、アンコンシャスバイアスでは?:東京新聞 [少考さん★]
- 【ボーボーの子が好き】新浪剛史氏が銀座のクラブでセクハラ「下半身を出し、ホステスに“見ろ”と」 [nita★]
- 【特大悲報】1千億円かけて開発した日本製衛星を積んだH3ロケット、第二エンジンが機能せず打ち上げ失敗…宇宙のもずくに☠ [339712612]
- 高市早苗「官民連携で純国産のヒノマルAIを作るわよ!手始めに初年度3000億円!」 [931948549]
- 反日韓国カルトの統一教会とズブズブの高市を熱狂的に支持するネトウヨ「イオンは中国企業!イオン岡田は売国奴!」 これマジで何なの? [314039747]
- 高市早苗「オールドメディアの取材よりSNSでの発信(大本営発表)を重視する」 [931948549]
- ソフトバンク「年末までにOpenAIに約束した約3兆4,000億円送金しないとやばい」現在必死に資金調達中 [673057929]
- 【動画】幼女への虐待動画、見てると心が苦しくなる
