関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ - Haskell-jp
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part33
https://mevius.5ch.net/test/read.cgi/tech/1581326256/
探検
関数型プログラミング言語Haskell Part34
1デフォルトの名無しさん
2021/12/17(金) 12:57:26.37ID:NPioGyUL338デフォルトの名無しさん
2024/08/29(木) 14:06:50.30ID:gtm/5H5m 使用例:
1 .+ 1
>2
1 .+ 1
>2
339デフォルトの名無しさん
2024/08/29(木) 16:27:15.59ID:Nq0HdWD9 やだやだ!修飾したくない!
どっちの+か特定して自動的に選択してよう!
どっちの+か特定して自動的に選択してよう!
340デフォルトの名無しさん
2024/08/29(木) 16:57:49.70ID:YXIyrRhD 何の自作型だか知らんがSemigroup実装して(<>)にでもすれば
341デフォルトの名無しさん
2024/08/29(木) 17:40:12.63ID:aIGVGYPU 就職しろよ
342デフォルトの名無しさん
2024/08/29(木) 20:48:46.38ID:gtm/5H5m >>339
独自の(+)を自動で使い分けてもらうにはNum型クラスのインスタンスにする必要があるけど、それでも見分けるには型が違わないといけない。
独自の(+)は、独自の型を受け取りますか?
そうじゃないとPreludeの(+)と判別する術がないけど。
独自の(+)を自動で使い分けてもらうにはNum型クラスのインスタンスにする必要があるけど、それでも見分けるには型が違わないといけない。
独自の(+)は、独自の型を受け取りますか?
そうじゃないとPreludeの(+)と判別する術がないけど。
343デフォルトの名無しさん
2024/08/29(木) 20:51:12.20ID:gtm/5H5m あ、できれば型宣言を見せて貰えるとアドバイスしやすい。
344デフォルトの名無しさん
2024/08/31(土) 21:17:53.38ID:XbdVGeAf ワカランドとして .+. と .-. と .*. を定義することにしました。しかし本質的に解決するにはNumクラスのインスタンス宣言するらしいですね。
しかし独自型同士の+と-、Rationalとの*、Rationalとの/はできますが、
独自型同士の*、独自型同士の/は定義不可能です。
従ってNumクラスになることはできませんでした。
結局どうしていいか判らんどからのワカランドで落ち着きました。
しかし独自型同士の+と-、Rationalとの*、Rationalとの/はできますが、
独自型同士の*、独自型同士の/は定義不可能です。
従ってNumクラスになることはできませんでした。
結局どうしていいか判らんどからのワカランドで落ち着きました。
345デフォルトの名無しさん
2024/09/03(火) 18:48:39.95ID:yXFMfbtr もしかしてData.Mapって遅い?
一日中検索かけてるような処理なら、もうMapを卒業するべきときか・・・
一日中検索かけてるような処理なら、もうMapを卒業するべきときか・・・
346デフォルトの名無しさん
2024/09/04(水) 00:16:15.77ID:r/FGXedG Data.Mapというより、リストが遅い。
とりあえずコンパイルの際にghc -O2とかghc -O3とかの最適化掛けてみる。
それでもなお速さを求めるなら、ByteStringとか使うと良い。
もしくは、正格評価版HaskellことIdris 2やRustに乗り換える。
(Idris1と2で互換性が無いらしく、別言語扱いされてる)
Haskellで速さを求めるとバッドノウハウが増えて本末転倒になる。
(そこまで苦労するなら素直に速い言語覚えた方が楽。それでも9.10.1はC#並みにはなった?かな?)
とりあえずコンパイルの際にghc -O2とかghc -O3とかの最適化掛けてみる。
それでもなお速さを求めるなら、ByteStringとか使うと良い。
もしくは、正格評価版HaskellことIdris 2やRustに乗り換える。
(Idris1と2で互換性が無いらしく、別言語扱いされてる)
Haskellで速さを求めるとバッドノウハウが増えて本末転倒になる。
(そこまで苦労するなら素直に速い言語覚えた方が楽。それでも9.10.1はC#並みにはなった?かな?)
347デフォルトの名無しさん
2024/09/04(水) 15:29:34.52ID:ZA+d8/X/ リストが遅い、しかし多くのデータ構造の構築はリストから(fromList)。
つまりコンストラクション回数をいかに減らすか、一度コンストラクトした物を使いまわすか、ということですか
つまりコンストラクション回数をいかに減らすか、一度コンストラクトした物を使いまわすか、ということですか
348デフォルトの名無しさん
2024/09/04(水) 16:12:14.21ID:LSV34QaC lisp系言語はリストの操作が速いのに…
349デフォルトの名無しさん
2024/09/04(水) 22:00:37.92ID:r/FGXedG350デフォルトの名無しさん
2024/09/04(水) 22:22:04.95ID:r/FGXedG351デフォルトの名無しさん
2024/09/05(木) 00:27:39.10ID:mpd8c2G1 普段使いって何してんの
エロ画像収集とか?
エロ画像収集とか?
352デフォルトの名無しさん
2024/09/05(木) 04:50:37.33ID:l0HQxOqp PythonやPerlの代わりにテキスト処理に使ってる。
353デフォルトの名無しさん
2024/09/05(木) 18:56:54.85ID:k3Tfomjz >>351
それ面白いと思って書き込んでんの?
それ面白いと思って書き込んでんの?
354デフォルトの名無しさん
2024/09/06(金) 09:50:34.80ID:zzPaKLb6 ブラウザでリンク画像が http://host/hoge.php?hage=fuga.jpg
みたいになってて最終的に jpg が表示されてるんだけど
http://host/hoge.php?hage=fuga.jpg をブラウザで開いても
jpg じゃなくて jpg ファイルのイメージがテキストファイルみたく表示される
こういうのは hoge.php の造りが悪い(たぶんhttpヘッダーが可笑しい)んだろうけど
じゃあなんで元頁では画像が表示されてたのかとか疑問は残る
それはともかく欲しいのは jpg ファイルなので
ブラウザに頼らずダウンローダーを描いた
みたいになってて最終的に jpg が表示されてるんだけど
http://host/hoge.php?hage=fuga.jpg をブラウザで開いても
jpg じゃなくて jpg ファイルのイメージがテキストファイルみたく表示される
こういうのは hoge.php の造りが悪い(たぶんhttpヘッダーが可笑しい)んだろうけど
じゃあなんで元頁では画像が表示されてたのかとか疑問は残る
それはともかく欲しいのは jpg ファイルなので
ブラウザに頼らずダウンローダーを描いた
355デフォルトの名無しさん
2024/09/06(金) 09:52:13.17ID:zzPaKLb6 補足
修正前: jpg ファイルのイメージ
正: jpg ファイルのバイナリデータ
修正前: jpg ファイルのイメージ
正: jpg ファイルのバイナリデータ
356デフォルトの名無しさん
2024/09/07(土) 19:33:25.03ID:9PXNQc4Q 長大な処理となる関数を実行途中にRAM使用量が嵩んでいくとします
中には解放できる部分もある場合について、
このままガベコレせずに進んでいったらいずれOSが『君にはもうRAM貸せないよ』と言ってくるでしょうが、ランタイムシステムは
@その時になってようやく解放できる場所がないか探し出す
@-i 今必要な最低限の確保ができたら即そこに記録して終わり
@-ii 強制的にminorGCを発動して、即そこに記録して終わり
@-iii 強制的にMajorGCを発動して、即そこに記録して終わり
@-iv 強制的にBlockingMajorGCを発動して、即そこに記録して終わり
@-v もはや解放できる場所は見つからないと判断したら例外終了
A何もせず例外終了する
Bその他
どれですか?
中には解放できる部分もある場合について、
このままガベコレせずに進んでいったらいずれOSが『君にはもうRAM貸せないよ』と言ってくるでしょうが、ランタイムシステムは
@その時になってようやく解放できる場所がないか探し出す
@-i 今必要な最低限の確保ができたら即そこに記録して終わり
@-ii 強制的にminorGCを発動して、即そこに記録して終わり
@-iii 強制的にMajorGCを発動して、即そこに記録して終わり
@-iv 強制的にBlockingMajorGCを発動して、即そこに記録して終わり
@-v もはや解放できる場所は見つからないと判断したら例外終了
A何もせず例外終了する
Bその他
どれですか?
357デフォルトの名無しさん
2024/09/07(土) 19:35:13.52ID:9PXNQc4Q 文字化けしちゃいました。文字化けした?は1、2,3だと思ってください
358デフォルトの名無しさん
2024/09/08(日) 00:17:59.58ID:m7MeNrY2 loop s なんちゃらかんちゃら
= do
let final_score = long_thunk_score + s
s' = sをなんちゃらかんちゃら
modify' $ Data.Map.Strict.insert key final_score
unsafePerformIO ( evaluate $ rnf final_score ) `seq` loop s' なんちゃらかんちゃら
このStateモナドは、final_scoreは状態Mapへ挿入される時はWHNFでしょうが、直後の行で完全に評価されています
この事はマップに挿入されたfinal_scoreへ影響を与えますか?
つまりマップへ挿入済みのサンクとしての値を後からUnsafePerformIOとevaluateとrnfを組み合わせて狙ったタイミングでRNF化できますか?
= do
let final_score = long_thunk_score + s
s' = sをなんちゃらかんちゃら
modify' $ Data.Map.Strict.insert key final_score
unsafePerformIO ( evaluate $ rnf final_score ) `seq` loop s' なんちゃらかんちゃら
このStateモナドは、final_scoreは状態Mapへ挿入される時はWHNFでしょうが、直後の行で完全に評価されています
この事はマップに挿入されたfinal_scoreへ影響を与えますか?
つまりマップへ挿入済みのサンクとしての値を後からUnsafePerformIOとevaluateとrnfを組み合わせて狙ったタイミングでRNF化できますか?
359デフォルトの名無しさん
2024/09/09(月) 11:45:42.71ID:CQiqzRbc >>356
黙って動いてるフリをする
黙って動いてるフリをする
360デフォルトの名無しさん
2024/09/26(木) 23:16:42.97ID:eAiUCVhs この言語まだ息してるのか?
361デフォルトの名無しさん
2024/09/27(金) 00:41:23.43ID:ppX7mFe8 おまいらは圏論はちゃんとマスターしたか?
最近圏論のお勉強流行ってないみたいだが
最近圏論のお勉強流行ってないみたいだが
362デフォルトの名無しさん
2024/09/28(土) 08:56:06.97ID:boijaUwp そもそもHaskellに圏論必要ないよ
363デフォルトの名無しさん
2024/09/28(土) 11:20:55.86ID:szplrxFB 背景の理論を理解してないとbrainf*ckと同列のクソパズル言語にしか見えない
364デフォルトの名無しさん
2024/09/28(土) 11:30:45.96ID:D4fCa7Ze 米田の何ちゃらの辺りで心が折れて終了
365デフォルトの名無しさん
2024/09/28(土) 11:48:20.49ID:M6f6jLKS >>363
> brainf*ckと同列のクソパズル言語
話がそれるけどbrainf*ckがパズル言語なのは100%その通りだよ
しかし構文パーサー、インタープリターやトランスレーター、JITエンジンの実践入門として
丁度良いからこれだけ根強い人気なんだぜ
> brainf*ckと同列のクソパズル言語
話がそれるけどbrainf*ckがパズル言語なのは100%その通りだよ
しかし構文パーサー、インタープリターやトランスレーター、JITエンジンの実践入門として
丁度良いからこれだけ根強い人気なんだぜ
366デフォルトの名無しさん
2024/09/28(土) 20:40:40.54ID:SDDTPU1M >>361
流行ってないのか…。
個人的にはHaskellよりも圏論の方に関心が移ってるのに…。
んでも、圏論はHaskellでなくても、全てのプログラミング言語の裏側でも動いてるし、それこそ算数の裏側でも動いてる。
モナドが表に出てきてるからHaskellには圏論が必要って思うかもだけど、モナドって言わないで do形式だけ教えて知れっとしてても良いし、「こういう動きの演算子」としてモナドを紹介するだけでも良い。
受験数学とちゃんと向き合う数学みたいなものだけど、変にモナドを理解しようとすると深みにはまる。
(それはそれで楽しいけど、楽しめる人だけだよね…)
流行ってないのか…。
個人的にはHaskellよりも圏論の方に関心が移ってるのに…。
んでも、圏論はHaskellでなくても、全てのプログラミング言語の裏側でも動いてるし、それこそ算数の裏側でも動いてる。
モナドが表に出てきてるからHaskellには圏論が必要って思うかもだけど、モナドって言わないで do形式だけ教えて知れっとしてても良いし、「こういう動きの演算子」としてモナドを紹介するだけでも良い。
受験数学とちゃんと向き合う数学みたいなものだけど、変にモナドを理解しようとすると深みにはまる。
(それはそれで楽しいけど、楽しめる人だけだよね…)
367デフォルトの名無しさん
2024/09/29(日) 07:33:19.55ID:bBvJfaeS ラムダと束縛変数をマスターしなければdo記法もマスターできないのを
すっかり忘れるぐらいポイントフリーが普及してるでしょ
すっかり忘れるぐらいポイントフリーが普及してるでしょ
368デフォルトの名無しさん
2024/09/29(日) 08:45:10.72ID:3/NLN/+f コーダーが数学の学習に使える時間なんて限られている
時間や基礎知識が足らないので、難解な数学を攻略するのはほぼ不可能
大学生時CSや数学の講義で身に付けておくしかない
時間や基礎知識が足らないので、難解な数学を攻略するのはほぼ不可能
大学生時CSや数学の講義で身に付けておくしかない
369デフォルトの名無しさん
2024/09/29(日) 09:32:49.44ID:twIz68VA 難解な数学を攻略できるなら
日本ではコーダーにはならないよな
日本ではコーダーにはならないよな
370デフォルトの名無しさん
2024/09/29(日) 10:15:01.09ID:AteoOTMZ 業界入るのに難解数学不要
プログラミングにも不要
数学分からんのでgoogle入るのは無理だけど
プログラミングにも不要
数学分からんのでgoogle入るのは無理だけど
371デフォルトの名無しさん
2024/09/29(日) 11:01:25.51ID:bBvJfaeS 人工的なルールに依存するのがクソパズルだが
自然界でなおかつ野生のマウンティング的なルールにも依存しないことが数学の目的のひとつだね
自然界でなおかつ野生のマウンティング的なルールにも依存しないことが数学の目的のひとつだね
372デフォルトの名無しさん
2024/09/29(日) 20:36:16.00ID:JU2vTa1F 圏論が全てのプログラミング言語の裏で動いてるとか適当なこと書くなよ
373デフォルトの名無しさん
2024/09/30(月) 00:30:17.34ID:Kh4w53R0 >>368
高卒の自分でも理解できるんだから、難しいわけではないんだけど。
何度も出てる通り、必ずしもモナドを理解する必要はないし。
そもそも自分がプログラマーの頃だって、12-13時間働いた後も新しいプログラミング言語や数学勉強してたぞ。
(新しい仕事のために学びたくない言語に時間使う事も)
高卒が圏論みたいな大学数学学ぶには専門用語がそもそも分らんから、用語が分かるまで遡った。
(アーベル圏のアーベルが分からないレベルからのスタート)
自分に投資できないと淘汰されるぞ。
高卒の自分でも理解できるんだから、難しいわけではないんだけど。
何度も出てる通り、必ずしもモナドを理解する必要はないし。
そもそも自分がプログラマーの頃だって、12-13時間働いた後も新しいプログラミング言語や数学勉強してたぞ。
(新しい仕事のために学びたくない言語に時間使う事も)
高卒が圏論みたいな大学数学学ぶには専門用語がそもそも分らんから、用語が分かるまで遡った。
(アーベル圏のアーベルが分からないレベルからのスタート)
自分に投資できないと淘汰されるぞ。
374デフォルトの名無しさん
2024/09/30(月) 00:59:39.85ID:Kh4w53R0 >>372
適当じゃない。
モナドは(主に)逐次処理に現れる構造なので、Haskellのような遅延評価で逐次処理自体を作らないといけない(逐次処理をエミュレートするためのモナド)言語でない限り、意識することすらない。
(だからC言語で言う i = 0; の「;」とか言われる)
適当じゃない。
モナドは(主に)逐次処理に現れる構造なので、Haskellのような遅延評価で逐次処理自体を作らないといけない(逐次処理をエミュレートするためのモナド)言語でない限り、意識することすらない。
(だからC言語で言う i = 0; の「;」とか言われる)
375デフォルトの名無しさん
2024/09/30(月) 03:08:44.15ID:g+sPZSfB376デフォルトの名無しさん
2024/09/30(月) 12:40:29.07ID:+8KmLjt4 圏論の極々一部のモナドを主語をデカくして圏論ガーとか言ってる人は何も分かってないんだなと思うけどね
俺みたいに数学かじってた人からすると
圏論を勉強すると「あ、この概念はこの分野のこれのことか」ってわかるけど
そうじゃない人は何のことを言ってるのかわからんと思う
専門家でも自分の担当外の圏なんて知らないのに
圏論という括りで語ろうとする人はそういうのすら理解してない
俺みたいに数学かじってた人からすると
圏論を勉強すると「あ、この概念はこの分野のこれのことか」ってわかるけど
そうじゃない人は何のことを言ってるのかわからんと思う
専門家でも自分の担当外の圏なんて知らないのに
圏論という括りで語ろうとする人はそういうのすら理解してない
377デフォルトの名無しさん
2024/09/30(月) 13:52:28.73ID:CD9F70e/ やっと普通の人が出てきて安心した
378デフォルトの名無しさん
2024/09/30(月) 13:59:18.70ID:pkON+G7q >>376
数学者向けの圏論の教科書の応用、具体例は全て数学。
数学知らない人が読んでも分かるわけがない。
応用、具体例、演習をCSの分野から採った教科書が望まれるが、書くのが難しい上に面白くするのも困難。
大体CSすらちゃんと修めてないエンジニアはやはり読めない。
CS自体ベースに位相、代数、グラフ理論と数学使うし。
数学者向けの圏論の教科書の応用、具体例は全て数学。
数学知らない人が読んでも分かるわけがない。
応用、具体例、演習をCSの分野から採った教科書が望まれるが、書くのが難しい上に面白くするのも困難。
大体CSすらちゃんと修めてないエンジニアはやはり読めない。
CS自体ベースに位相、代数、グラフ理論と数学使うし。
379デフォルトの名無しさん
2024/09/30(月) 14:09:03.81ID:rwCIuc1C 趣味でやる人に良くいるんだよね。
応用各分野に囚われずに、圏論そのものを学習したい、一般圏論を研究したいって人。
これは数学で言うと、集合論と同じく数学基礎論の分野。
応用各分野に囚われずに、圏論そのものを学習したい、一般圏論を研究したいって人。
これは数学で言うと、集合論と同じく数学基礎論の分野。
380デフォルトの名無しさん
2024/09/30(月) 19:05:45.94ID:8C0MP56i 操作的意味論とか表示的意味論でプログラムを数学の話にして、その数学を圏論で整理するって話
だからアーベル圏とか具体的な圏はあんま出てこない。
やるとすれば
デカルト閉圏:ランベックがλ計算のモデルになると発見して関数型プログラミング的に重要
クライスリ圏:Moggiが計算効果をカプセル化したときの根拠の圏
ローベア理論:代数的効果をちゃんと理解するときは必要らしい。操作的意味論と表示的意味論と同じようにモナドの理論と妥当性が成り立つようだ。
ぐらいじゃね。
だからアーベル圏とか具体的な圏はあんま出てこない。
やるとすれば
デカルト閉圏:ランベックがλ計算のモデルになると発見して関数型プログラミング的に重要
クライスリ圏:Moggiが計算効果をカプセル化したときの根拠の圏
ローベア理論:代数的効果をちゃんと理解するときは必要らしい。操作的意味論と表示的意味論と同じようにモナドの理論と妥当性が成り立つようだ。
ぐらいじゃね。
381デフォルトの名無しさん
2024/09/30(月) 21:09:21.28ID:CVtPTYpb じゃあラムダ計算(のモデル)だけを考えよう
タプルや代数的データ型は使わない
それでもモナドの具体例を作れるのを知ってるのが専門バカ
知らないのが一般国民だ
タプルや代数的データ型は使わない
それでもモナドの具体例を作れるのを知ってるのが専門バカ
知らないのが一般国民だ
382デフォルトの名無しさん
2024/09/30(月) 21:29:13.05ID:8C0MP56i 一般国民。
λ計算のモデルでモナド作ってなにかいいことあるの?計算効果結局表現できないんじゃ?
拡張してcomputational lambda calculusやるって話?
λ計算のモデルでモナド作ってなにかいいことあるの?計算効果結局表現できないんじゃ?
拡張してcomputational lambda calculusやるって話?
383デフォルトの名無しさん
2024/09/30(月) 21:47:09.45ID:CVtPTYpb ないんじゃないか
ただ「具体例を出せば、いいことがある」とは誰も言ってない
というファクトをチェックするのは悪いことではない
ただ「具体例を出せば、いいことがある」とは誰も言ってない
というファクトをチェックするのは悪いことではない
384デフォルトの名無しさん
2024/09/30(月) 21:53:56.34ID:8C0MP56i いいこと(メリット)があるから具体例が作られると思うんだが。
それは単に具体例の適用が間違ってるって話じゃね?
なんとなく作れるから群構造作ってみましたとかとか目的不在で作ったらそら何がいいかわからんし。
モナドだったら、各計算効果を圏(クライスリ圏)の中に閉じ込めることに成功しました(カプセル化)。
計算効果は強モナドの構造を取っているようです(計算効果の研究のとっかかり)。
みたいないいことあるから流行るんでしょ。
それは単に具体例の適用が間違ってるって話じゃね?
なんとなく作れるから群構造作ってみましたとかとか目的不在で作ったらそら何がいいかわからんし。
モナドだったら、各計算効果を圏(クライスリ圏)の中に閉じ込めることに成功しました(カプセル化)。
計算効果は強モナドの構造を取っているようです(計算効果の研究のとっかかり)。
みたいないいことあるから流行るんでしょ。
385デフォルトの名無しさん
2024/10/01(火) 04:04:03.18ID:PZ96E01/ 別にそれ圏論を持ち出す必要ないよね
ハイおしまい
ハイおしまい
386デフォルトの名無しさん
2024/10/01(火) 09:39:15.78ID:KbL1rq/V >なんとなく作れるから群構造作ってみました
ルービックキューブのことか
ルービックキューブのことか
387デフォルトの名無しさん
2024/10/01(火) 09:46:07.52ID:y60InQ2q 数学屋さんもね
研究では圏を使うが
学生に教えるときは
圏を記述に使わず教えたりする
研究では圏を使うが
学生に教えるときは
圏を記述に使わず教えたりする
388デフォルトの名無しさん
2024/10/01(火) 19:23:20.12ID:7kn4RxVI 圏論の話題になったから振ったのに。まあいいよ。
圏論根拠で(ソフトウェア工学的にじゃなくて)数学的にカプセル化が実現されてるってすごい
ことだと思うけどね。
>ルービックキューブのことか
ルービックキューブ解くという目的あるんなら構築する意味あるんじゃない。
圏論根拠で(ソフトウェア工学的にじゃなくて)数学的にカプセル化が実現されてるってすごい
ことだと思うけどね。
>ルービックキューブのことか
ルービックキューブ解くという目的あるんなら構築する意味あるんじゃない。
389デフォルトの名無しさん
2024/10/01(火) 19:34:54.43ID:YZm15ve9 群持ち出したところで解けないよ
390デフォルトの名無しさん
2024/10/01(火) 20:18:43.32ID:PZ96E01/ 圏論がプログラミングの問題解決に寄与するわけないのにね
ただ当てはめてみたってだけのことを過大評価しすぎ
ただ当てはめてみたってだけのことを過大評価しすぎ
391デフォルトの名無しさん
2024/10/01(火) 20:52:10.03ID:u1x9FxNe 雪田修一の「圏論入門 Haskellで計算する 具体例から」ってどうなん?
392デフォルトの名無しさん
2024/10/01(火) 21:10:04.55ID:YpLGkLDy 板チ
目的と手段を混同したら予選敗退
目的と手段を混同したら予選敗退
393デフォルトの名無しさん
2024/10/01(火) 21:16:26.45ID:7kn4RxVI どうなんって何を知るのに?出たときに立ち読みしただけだけど。
394デフォルトの名無しさん
2024/10/01(火) 21:16:56.98ID:Ig6Tf0ue395デフォルトの名無しさん
2024/10/01(火) 21:38:18.13ID:Ig6Tf0ue 圏論をやりたいならまず代数学をやるべき
それだけでだいぶ見通しが違う
それだけでだいぶ見通しが違う
396デフォルトの名無しさん
2024/10/01(火) 21:42:08.00ID:4kH314XL >>390
モナドの効用で自分の把握してるのは
・数学やHaskellの様な遅延評価の場合、逐次処理を表現できる
(これは変数を使いまわさない場合は、関数合成で十分だが、変数を使いまわすときはモナドじゃないと使いまわせない)
・副作用のある関数を使っても参照透明性は保たれている
・モナドは入れ物前提の概念なので、空の状態を使って例外処理をまとめることができる
正直、普通のプログラミング言語にも役立ちそうな3つ目は実感はしてないけど、ネットで例外処理よりモナドの方が優秀っぽい記事を読んだ
2番目もマルチスレッドとか最適化には役に立ちそうではある
(マルチスレッドなら正格評価版HaskellのIdris2やRustだと思うが)
モナドの効用で自分の把握してるのは
・数学やHaskellの様な遅延評価の場合、逐次処理を表現できる
(これは変数を使いまわさない場合は、関数合成で十分だが、変数を使いまわすときはモナドじゃないと使いまわせない)
・副作用のある関数を使っても参照透明性は保たれている
・モナドは入れ物前提の概念なので、空の状態を使って例外処理をまとめることができる
正直、普通のプログラミング言語にも役立ちそうな3つ目は実感はしてないけど、ネットで例外処理よりモナドの方が優秀っぽい記事を読んだ
2番目もマルチスレッドとか最適化には役に立ちそうではある
(マルチスレッドなら正格評価版HaskellのIdris2やRustだと思うが)
397デフォルトの名無しさん
2024/10/01(火) 22:05:17.67ID:4kH314XL 圏論全体だと…当たり前のことを構造として研究してるだけなので、圏論というよりはHaskellの型クラスとの合わせ技で関手(Functor)の方がfmap的なのを他の言語にも導入すれば役に立つかも
圏論の関手を一言で言えば(関数も含めた)型変換
(Hakellだと入れ物前提にすることで、関数ごと型変換を実現。本来はもっと柔軟)
自然変換は一言で言えば単位変換とか、大文字小文字の変換
圏論の関手を一言で言えば(関数も含めた)型変換
(Hakellだと入れ物前提にすることで、関数ごと型変換を実現。本来はもっと柔軟)
自然変換は一言で言えば単位変換とか、大文字小文字の変換
398デフォルトの名無しさん
2024/10/01(火) 22:16:21.15ID:4kH314XL モノイドは条件が結合法則だけなので、ほぼ結合法則そのものがモノイド
(その割には繰り返しとか数え上げに現れる構造)
そしてモナドも構造はそっくりなので、入れ物前提のモノイドとも考えられる
(モナドの再帰はループ処理でスタックを消費しないし、数え上げは逐次処理と考えられる)
(その割には繰り返しとか数え上げに現れる構造)
そしてモナドも構造はそっくりなので、入れ物前提のモノイドとも考えられる
(モナドの再帰はループ処理でスタックを消費しないし、数え上げは逐次処理と考えられる)
399デフォルトの名無しさん
2024/10/01(火) 23:08:20.75ID:KbL1rq/V バグを無くすこと自体が目的になりがちなのが数学とプログラムなんだよね
真の目的のため、デバッグを二の次にするやつが正しいと言われても・・・
それって証明とかあるんですか
真の目的のため、デバッグを二の次にするやつが正しいと言われても・・・
それって証明とかあるんですか
400デフォルトの名無しさん
2024/10/01(火) 23:21:35.19ID:syLuNokt401デフォルトの名無しさん
2024/10/01(火) 23:25:15.70ID:syLuNokt402デフォルトの名無しさん
2024/10/02(水) 05:35:22.65ID:OAhBXB+m やっぱり数学的に表現してみただけってことか
まぁ実際のプログラミングに利益はないわな
まぁ実際のプログラミングに利益はないわな
403デフォルトの名無しさん
2024/10/02(水) 07:50:08.23ID:AFS53MaU >>400
よくよく考えたら特別な事じゃないんだけど、普通のプログラミング言語でも大文字・小文字の変換関数を自作するってなったら、文字をInt型に変換して処理する。
それって文字の圏で直接大文字小文字の変換するを作れない場合、一旦整数の圏を経由する関数を作る。
A(a) → B(a)
↓ ↓
A(A) → B(A)
可換図のA(a) → B(a)の逆射が作れれば、B(a) → B(A)が作れる。
ほら、分かってみれば「なーんだ。そんなことか」でしょ?
よくよく考えたら特別な事じゃないんだけど、普通のプログラミング言語でも大文字・小文字の変換関数を自作するってなったら、文字をInt型に変換して処理する。
それって文字の圏で直接大文字小文字の変換するを作れない場合、一旦整数の圏を経由する関数を作る。
A(a) → B(a)
↓ ↓
A(A) → B(A)
可換図のA(a) → B(a)の逆射が作れれば、B(a) → B(A)が作れる。
ほら、分かってみれば「なーんだ。そんなことか」でしょ?
404デフォルトの名無しさん
2024/10/02(水) 07:53:32.91ID:AFS53MaU この場合、整数同士の足し算に対応する、文字同士の足し算が作れる。
(ただし、整数と文字列で集合の大きさを合わせる必要がある。0-25とか1-26とかで循環する集合)
(ただし、整数と文字列で集合の大きさを合わせる必要がある。0-25とか1-26とかで循環する集合)
405デフォルトの名無しさん
2024/10/02(水) 07:55:35.67ID:AFS53MaU んで、プログラマーはいちいち集合を合わせないで、エラー処理だったり循環リスト作ったりで対応するわけだぬ。
406デフォルトの名無しさん
2024/10/02(水) 08:30:24.33ID:VSz9kg2E 数学の圏論テキストではカリー化の操作は良く使うが、カリー化の名前を付けて引用することはまず無いね。
407デフォルトの名無しさん
2024/10/02(水) 08:47:20.09ID:wonXK6QE408デフォルトの名無しさん
2024/10/02(水) 09:21:51.83ID:ZmuRtoMU 大文字の文字列の型から小文字の文字列の型への変換と考えると簡単
409デフォルトの名無しさん
2024/10/02(水) 09:24:29.51ID:ZmuRtoMU リスト関手から集合関手への自然変換も分かりやすい。
410デフォルトの名無しさん
2024/10/02(水) 10:25:28.13ID:xCLOcr8o すまん嘘を書いた
自然変換では無くリストの圏から集合の圏への関手だった
自然変換では無くリストの圏から集合の圏への関手だった
411デフォルトの名無しさん
2024/10/02(水) 10:27:20.94ID:ZmuRtoMU 大文字列、小文字列も同様に間違い
412デフォルトの名無しさん
2024/10/02(水) 16:24:48.26ID:H02uk4bf413デフォルトの名無しさん
2024/10/02(水) 20:27:37.99ID:AFS53MaU >>407
圏論の自然変換だと文字コード前提じゃないので、[0..25] = ['a'..'z'] = ['A'..'Z']ってする。
んで、大文字と小文字は同じ文字の圏、[0..25]は自然数の圏とする。
lCharToInt c = (length.takeWhile (c /=)) ['a'..'z'] -- 小文字からIntへの変換(関手)
uCharToInt c = (length.takeWhile (c /=)) ['A'..'Z'] -- 大文字からIntへの変換(関手)
toLChar = (['a'..'z']!!) -- Intから小文字への変換(関手)
toUChar = (['A'..'Z']!!) -- Intから大文字への変換(関手)
mytoLower = toLChar.uCharToInt -- 大文字から小文字への変換(自然変換)
mytoUpper = toUChar.lCharToInt -- 小文字から大文字への変換(自然変換)
でも、普通のプログラミング言語のtoLower, toUpperも、Char型を圏とみれば同じ。
可換にするのは面倒くさい上に効率悪いけど、そういう関手を作ろうと思えば作れる。
圏論の自然変換だと文字コード前提じゃないので、[0..25] = ['a'..'z'] = ['A'..'Z']ってする。
んで、大文字と小文字は同じ文字の圏、[0..25]は自然数の圏とする。
lCharToInt c = (length.takeWhile (c /=)) ['a'..'z'] -- 小文字からIntへの変換(関手)
uCharToInt c = (length.takeWhile (c /=)) ['A'..'Z'] -- 大文字からIntへの変換(関手)
toLChar = (['a'..'z']!!) -- Intから小文字への変換(関手)
toUChar = (['A'..'Z']!!) -- Intから大文字への変換(関手)
mytoLower = toLChar.uCharToInt -- 大文字から小文字への変換(自然変換)
mytoUpper = toUChar.lCharToInt -- 小文字から大文字への変換(自然変換)
でも、普通のプログラミング言語のtoLower, toUpperも、Char型を圏とみれば同じ。
可換にするのは面倒くさい上に効率悪いけど、そういう関手を作ろうと思えば作れる。
414デフォルトの名無しさん
2024/10/02(水) 20:45:45.19ID:AFS53MaU 可換図にすると
Char(小文字)
⇗
Int ⇑toL ⇓toU
⇘
Char(大文字)
ここで、小文字→Int, 大文字→Intが作れればtoLower, toUpperを直接作らなくても、関手の合成で作れる。
Char(小文字)
⇗
Int ⇑toL ⇓toU
⇘
Char(大文字)
ここで、小文字→Int, 大文字→Intが作れればtoLower, toUpperを直接作らなくても、関手の合成で作れる。
415デフォルトの名無しさん
2024/10/02(水) 20:53:28.38ID:4E8lSXKR 出番ですよ >>399
416デフォルトの名無しさん
2024/10/02(水) 21:03:02.82ID:AFS53MaU 圏論の地平線でも書かれていたけど、圏論は直接的に役に立つというより、発想の転換の源泉になるそうな。
(なので、別に圏論分かったから偉いとかない)
(なので、別に圏論分かったから偉いとかない)
417デフォルトの名無しさん
2024/10/02(水) 21:18:36.03ID:JUMm5MLB 数学の研究には有用かも知れないが
プログラミングで
直接役に立つようなことはまず無い
プログラミングで
直接役に立つようなことはまず無い
418デフォルトの名無しさん
2024/10/02(水) 21:42:50.80ID:Xrjxo4NT どっ白け
419デフォルトの名無しさん
2024/10/02(水) 21:51:30.73ID:OPLMo7z3 プログラミング言語もどんどん数学に寄せているし、上のカキコみたいにプログラムの記述を
そのまま数学的対象とみなせるように改造していってると思う。本来は別物と考えるべきだと思う。
数学の研究といってもプログラム意味論の研究で、プログラムを数学の世界に写像したら
どう表現できるかということを研究していると言えるんじゃないかと思う。
数学の世界には、式の評価途中に発生する副作用といった概念がないので、現実のプログラムを
そのまま数学の世界に移そうと思ってもできないことの方が多い。
計算効果を圏論的に表現できたというのは、そういうプログラミング言語の数学化の一端みたいな
もんだと思う。
そのまま数学的対象とみなせるように改造していってると思う。本来は別物と考えるべきだと思う。
数学の研究といってもプログラム意味論の研究で、プログラムを数学の世界に写像したら
どう表現できるかということを研究していると言えるんじゃないかと思う。
数学の世界には、式の評価途中に発生する副作用といった概念がないので、現実のプログラムを
そのまま数学の世界に移そうと思ってもできないことの方が多い。
計算効果を圏論的に表現できたというのは、そういうプログラミング言語の数学化の一端みたいな
もんだと思う。
420デフォルトの名無しさん
2024/10/02(水) 22:00:14.12ID:YWEZQEUD 副作用ってどうでもよくね
Haskellとかだとそもそも副作用ないし
Haskellとかだとそもそも副作用ないし
421デフォルトの名無しさん
2024/10/02(水) 22:12:34.31ID:OPLMo7z3 現実のプログラムだと式を評価する途中で発生する副作用というのは普通だけれど、
これを表示的意味論、操作的意味論で数学の世界に写そうと思うと途端に難しくなる。
数学で式の途中に文字列をディスプレイに映し出す、みたいな概念はないから。
それを整理して副作用と呼んでも差し支えない概念を提唱してHaskellに実装しているんだよ。
実際、IOモナドの圏論的定式みるとこれが副作用?という表式してる。
全部後回しにしてフラッシュするというアイディアみたい。副作用をプログラムの最終局面で
実行しているから、式の評価途中の参照透明性も壊さない。なるほど、って感じ。
これを表示的意味論、操作的意味論で数学の世界に写そうと思うと途端に難しくなる。
数学で式の途中に文字列をディスプレイに映し出す、みたいな概念はないから。
それを整理して副作用と呼んでも差し支えない概念を提唱してHaskellに実装しているんだよ。
実際、IOモナドの圏論的定式みるとこれが副作用?という表式してる。
全部後回しにしてフラッシュするというアイディアみたい。副作用をプログラムの最終局面で
実行しているから、式の評価途中の参照透明性も壊さない。なるほど、って感じ。
422デフォルトの名無しさん
2024/10/02(水) 22:20:07.75ID:sFAdPyYV ID:OPLMo7z3 = ID:AFS53MaU 本人か同レベル
複おじってレベル
複おじってレベル
423デフォルトの名無しさん
2024/10/02(水) 22:24:19.37ID:YWEZQEUD 途端に難しくなるか?
副作用のない計算に変換する手順が教科書に書いてあるはずだが?
副作用のない計算に変換する手順が教科書に書いてあるはずだが?
424デフォルトの名無しさん
2024/10/02(水) 22:29:49.51ID:OPLMo7z3425デフォルトの名無しさん
2024/10/02(水) 22:43:26.42ID:+kVmY7U4426デフォルトの名無しさん
2024/10/02(水) 22:46:45.28ID:+kVmY7U4427デフォルトの名無しさん
2024/10/02(水) 22:51:00.95ID:OPLMo7z3 定義が何もないのに何も言えるわけないじゃん。
数学でこういうものを定義します、これをプログラムのこれこれと対応付けます。
てプロセスないじゃん。
数学でこういうものを定義します、これをプログラムのこれこれと対応付けます。
てプロセスないじゃん。
428デフォルトの名無しさん
2024/10/02(水) 22:52:03.28ID:YWEZQEUD429デフォルトの名無しさん
2024/10/02(水) 22:55:13.15ID:+kVmY7U4430デフォルトの名無しさん
2024/10/02(水) 22:56:24.21ID:OPLMo7z3 いや。プログラム意味論の本結構探し回ったけど副作用の記述は漠然としてて
扱えないわけじゃないらしいけど、具体的な変換なんて見たことない。
ちょうど伝統的なプログラム意味論で副作用どう扱われているか調べているんだ。
なんて本に書いてありましたか?
扱えないわけじゃないらしいけど、具体的な変換なんて見たことない。
ちょうど伝統的なプログラム意味論で副作用どう扱われているか調べているんだ。
なんて本に書いてありましたか?
431デフォルトの名無しさん
2024/10/02(水) 23:02:49.62ID:YWEZQEUD どれにでも書いてあるだろ、whileプログラムをラムダ計算に変換する手順とか書いてないなんてことがあるわけがない
432デフォルトの名無しさん
2024/10/02(水) 23:06:08.21ID:OPLMo7z3 なんだ。いや聞きたいのは入出力とかの副作用だよ。
433デフォルトの名無しさん
2024/10/02(水) 23:17:44.98ID:YWEZQEUD 入出力なんて代入に比べたら自明だろ…
そんなのいちいち教科書に書くかよ
そんなのいちいち教科書に書くかよ
434デフォルトの名無しさん
2024/10/02(水) 23:26:30.50ID:OPLMo7z3 書いてないのは自明だからではなくて、研究の方向性がどう転ぶかわからないからだと思う。
表示的意味論も出た当時の文献では副作用について語ってることが多い。
現代的な本になるほどD∞モデルつくってはいおしまいで数学的にきれいなところしかやらない。
表示的意味論も出た当時の文献では副作用について語ってることが多い。
現代的な本になるほどD∞モデルつくってはいおしまいで数学的にきれいなところしかやらない。
435デフォルトの名無しさん
2024/10/02(水) 23:36:01.67ID:JUMm5MLB プログラムの仕様とその証明を数学で記述する本にあるだろうね。
436デフォルトの名無しさん
2024/10/02(水) 23:37:10.87ID:YWEZQEUD どこが非自明なのかさっぱりわからん
代入と違って入出力は垂れ流しだし、入出力は代入の特別な場合だろ
代入と違って入出力は垂れ流しだし、入出力は代入の特別な場合だろ
437デフォルトの名無しさん
2024/10/02(水) 23:46:11.64ID:OPLMo7z3 >>435
ホーア論理とか公理的意味論か。いやそれはないな。あっても一般に適用できないし。
>>436
関数型プログラミングだとプログラムをλ式に対応させて、プログラムの実行をそのλ式の簡約に
対応させるというのが理想的なモデルとして想定されることが多いと思う。
でもλ式はλ項からλ項への対応でしかないから、λ項を値(value)と呼ぶとすると
value から valueへの数学的関数でしかない。これには入出力とかの副作用を表現する余地がない。
つまり、
入出力があるプログラム→value から valueへの数学的関数
という対応付けをすると、入出力という特徴が数学世界では失われてしまう。
という難問があった、けどモナドで一つ解答が出た。
ホーア論理とか公理的意味論か。いやそれはないな。あっても一般に適用できないし。
>>436
関数型プログラミングだとプログラムをλ式に対応させて、プログラムの実行をそのλ式の簡約に
対応させるというのが理想的なモデルとして想定されることが多いと思う。
でもλ式はλ項からλ項への対応でしかないから、λ項を値(value)と呼ぶとすると
value から valueへの数学的関数でしかない。これには入出力とかの副作用を表現する余地がない。
つまり、
入出力があるプログラム→value から valueへの数学的関数
という対応付けをすると、入出力という特徴が数学世界では失われてしまう。
という難問があった、けどモナドで一つ解答が出た。
438デフォルトの名無しさん
2024/10/02(水) 23:54:51.93ID:YWEZQEUD 代入が書けるんだから、入出力なんて自明だろ…
こいつ何いってんだ…
こいつ何いってんだ…
レスを投稿する
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 俺「お湯を流してと…」シンク「ボンッw」
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- ヤフコメ「中国への輸出がなくなる事で、日本国内で美味しくいただける事に感謝します」👈やたら政権寄りなのはなぜ?(´・ω・`) [399259198]
- もう寝ます
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
