関数型プログラミング言語 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:NPioGyUL461デフォルトの名無しさん
2024/10/04(金) 05:52:21.21ID:EogKDI3R >>460
ようするに副作用はないってことじゃん
ようするに副作用はないってことじゃん
462デフォルトの名無しさん
2024/10/04(金) 05:57:16.46ID:vLDssEdm >>461
Javaは変数をクラスの外で作れないから、グローバル変数は存在しない。
けど、事実上のグローバル変数は作れてしまう。
ってのと、同じ。
アクションの中に副作用があろうが、マシン語を返していると解釈しようが、事実として副作用はある。
ただ、重要なのは副作用を伴っても参照透明性が保たれているってこと。
Javaは変数をクラスの外で作れないから、グローバル変数は存在しない。
けど、事実上のグローバル変数は作れてしまう。
ってのと、同じ。
アクションの中に副作用があろうが、マシン語を返していると解釈しようが、事実として副作用はある。
ただ、重要なのは副作用を伴っても参照透明性が保たれているってこと。
463デフォルトの名無しさん
2024/10/04(金) 06:07:02.79ID:4jD3Hbcp 副作用が隔離できていることが大切
スレの基地外の隔離スレのように
スレの基地外の隔離スレのように
464デフォルトの名無しさん
2024/10/04(金) 06:24:04.70ID:EogKDI3R >>462
それは例えばwhileプログラムから副作用のない言語に変換したあとの形式と同じ状態にすでになってるってことで、計算のルール上はもう副作用はないでしょ
それは例えばwhileプログラムから副作用のない言語に変換したあとの形式と同じ状態にすでになってるってことで、計算のルール上はもう副作用はないでしょ
465デフォルトの名無しさん
2024/10/04(金) 07:22:19.19ID:vLDssEdm >>464
そうなんだけど、結局普通のプログラミング言語を使ってる人にしてみれば屁理屈でしかない。
見た目そのままで伝えるなら、純粋関数型言語の定義のまんま、「副作用を伴っても参照透明性が保たれている」でいい。
そうなんだけど、結局普通のプログラミング言語を使ってる人にしてみれば屁理屈でしかない。
見た目そのままで伝えるなら、純粋関数型言語の定義のまんま、「副作用を伴っても参照透明性が保たれている」でいい。
466デフォルトの名無しさん
2024/10/04(金) 07:38:19.23ID:EogKDI3R467デフォルトの名無しさん
2024/10/04(金) 07:48:51.79ID:vLDssEdm >>466
そうそう。
副作用は無い!って、こっちが必死になって弁を述べれば述べるほど、屁理屈感が出てくる。
それよりは副作用を認めて、「副作用を分離」「副作用を伴っても参照透明性が保たれている」って言った方が、納得感がある。
そうそう。
副作用は無い!って、こっちが必死になって弁を述べれば述べるほど、屁理屈感が出てくる。
それよりは副作用を認めて、「副作用を分離」「副作用を伴っても参照透明性が保たれている」って言った方が、納得感がある。
468デフォルトの名無しさん
2024/10/04(金) 19:23:08.02ID:tixO3LDq とりあえず続きを書いてみる。
Haskellでいうところの
純粋関数は、valueからvalueへの数学的関数
入出力プログラムは、valueから(入出力)computationへの対応
に割り当てることで、数学上にプログラミング行為を写し出せそうだ、というところまで書いた。
ただ、やっぱり(入出力)computationって何?とか、valueと形式的にどう違うの?という疑問は拭い去ることができない。
そこでMoggiは、次のようなアイディアを2つ出して(結構ムリヤリに)疑問を解決した。
ただし、ここで入出力プログラム prog は A型の引数を取って(computationの整理をする前は)B型の返り値を返すとする。
Haskellでいうところの
純粋関数は、valueからvalueへの数学的関数
入出力プログラムは、valueから(入出力)computationへの対応
に割り当てることで、数学上にプログラミング行為を写し出せそうだ、というところまで書いた。
ただ、やっぱり(入出力)computationって何?とか、valueと形式的にどう違うの?という疑問は拭い去ることができない。
そこでMoggiは、次のようなアイディアを2つ出して(結構ムリヤリに)疑問を解決した。
ただし、ここで入出力プログラム prog は A型の引数を取って(computationの整理をする前は)B型の返り値を返すとする。
469デフォルトの名無しさん
2024/10/04(金) 19:23:42.06ID:tixO3LDq Moggiのアイディア1
・返り値の型がBのcomputationは、何か型構築子をIOとすると、その型構築子を適用した型 IO B のvalueに対応する。
※Moggiの原理ともいう。
つまり、上で挙げた入出力プログラム prog の型は、具体的に A → IO B になると言っている。
IO B 型の実装で、入出力の予約だか、値のリストだか指示書だか表現はいろいろあるが、そういう機構を実装すれば、
prog :: A → IO B
は参照透過性を保ったまま入出力を行うプログラムになる。
もっと広がりが出そうなcomputation概念なのに、急に狭窄な感じがするアイディアだけれど、
実装と折り合いをつけるという観点からすると仕方ないともいえる。
なお、代数的効果のPlotkinとPowerが批判しているのはこのMoggiのアイディア1である感じがする(あんまわかってない)。
・返り値の型がBのcomputationは、何か型構築子をIOとすると、その型構築子を適用した型 IO B のvalueに対応する。
※Moggiの原理ともいう。
つまり、上で挙げた入出力プログラム prog の型は、具体的に A → IO B になると言っている。
IO B 型の実装で、入出力の予約だか、値のリストだか指示書だか表現はいろいろあるが、そういう機構を実装すれば、
prog :: A → IO B
は参照透過性を保ったまま入出力を行うプログラムになる。
もっと広がりが出そうなcomputation概念なのに、急に狭窄な感じがするアイディアだけれど、
実装と折り合いをつけるという観点からすると仕方ないともいえる。
なお、代数的効果のPlotkinとPowerが批判しているのはこのMoggiのアイディア1である感じがする(あんまわかってない)。
470デフォルトの名無しさん
2024/10/04(金) 19:24:13.18ID:tixO3LDq Moggiのアイディア2
・入出力プログラム(に対応する数学的概念)は、圏をなすはずだ。
Moggiのアイディア1の段階でもprog :: A → IO Bは参照透過性を保ったまま入出力を行うプログラムになるはずだが、
入出力プログラム同士の合成が考えられていない。入出力プログラム prog1、prog2と開発したら、できるだけ再利用するというのが
現実のプログラミングだと思う。わざわざprog1とprog2の合成として定義できそうなプログラムを得るために、イチイチいちから
開発するということを理論的に要請されるというのは不合理。
純粋関数は、λ式に割り当てられることになって、当然、圏をなすだろうに、
プログラムに割り当てられるものが圏を成さないというのはおかしい。
でも、入出力プログラムはMoggiのアイディア1から、
prog :: A → IO B
という特殊な返り値の型を持っているため単純な合成ができない。
・入出力プログラム(に対応する数学的概念)は、圏をなすはずだ。
Moggiのアイディア1の段階でもprog :: A → IO Bは参照透過性を保ったまま入出力を行うプログラムになるはずだが、
入出力プログラム同士の合成が考えられていない。入出力プログラム prog1、prog2と開発したら、できるだけ再利用するというのが
現実のプログラミングだと思う。わざわざprog1とprog2の合成として定義できそうなプログラムを得るために、イチイチいちから
開発するということを理論的に要請されるというのは不合理。
純粋関数は、λ式に割り当てられることになって、当然、圏をなすだろうに、
プログラムに割り当てられるものが圏を成さないというのはおかしい。
でも、入出力プログラムはMoggiのアイディア1から、
prog :: A → IO B
という特殊な返り値の型を持っているため単純な合成ができない。
471デフォルトの名無しさん
2024/10/04(金) 19:29:03.13ID:tixO3LDq Moggiのアイディア1の段階でcomputationの概念というのは解消してしまう。
PlotokinとPowerはそこが不満なんだろうか?
PlotokinとPowerはそこが不満なんだろうか?
472デフォルトの名無しさん
2024/10/04(金) 20:18:31.78ID:WSIC8Xt5 だから、副作用を隠してラムダ計算に変換する手続きは、世界をステートにする変換をした時点で達成されてるわけで、そんなの太古の昔から分かってたことだろ
IO aの定義読んでから出直せよ
IO aの定義読んでから出直せよ
473デフォルトの名無しさん
2024/10/04(金) 20:30:15.44ID:SclsbEZF 日を跨ぐつもりならコテハンでも付けてくれんか
追えん
追えん
474デフォルトの名無しさん
2024/10/04(金) 20:44:30.01ID:tixO3LDq475デフォルトの名無しさん
2024/10/04(金) 20:49:17.68ID:WSIC8Xt5476デフォルトの名無しさん
2024/10/04(金) 20:51:48.70ID:tixO3LDq だから、入出力がある数学的関数なんてないじゃん。
入出力があるプログラムを数学的に表現しようと思っても詰むからどうしようって話。
入出力があるプログラムを数学的に表現しようと思っても詰むからどうしようって話。
477デフォルトの名無しさん
2024/10/04(金) 20:57:28.69ID:6lZW+X9H こんなところで長文書くのはやめてもろて
読む価値があるものならzennとかnoteに書けば?
関数型言語界隈の人たちがクソミソにレビューしてくれるよ
読む価値があるものならzennとかnoteに書けば?
関数型言語界隈の人たちがクソミソにレビューしてくれるよ
478デフォルトの名無しさん
2024/10/04(金) 20:58:08.93ID:WSIC8Xt5479デフォルトの名無しさん
2024/10/04(金) 21:00:48.64ID:qBjLuAvO メインの入力とメインの出力は数学にもある
主じゃないやつを副作用といってる
主じゃないやつを副作用といってる
480デフォルトの名無しさん
2024/10/04(金) 21:11:30.04ID:tixO3LDq481デフォルトの名無しさん
2024/10/04(金) 21:11:31.21ID:tixO3LDq482デフォルトの名無しさん
2024/10/04(金) 21:18:24.66ID:WSIC8Xt5483デフォルトの名無しさん
2024/10/04(金) 21:25:06.50ID:WSIC8Xt5 そうだよ、こんなとこじゃなくてzennとかに煽った感じのタイトルつけて炎上する記事書いてコメントもらって来いよ
484デフォルトの名無しさん
2024/10/04(金) 21:28:05.10ID:tixO3LDq λ計算を機械語とかアセンブラと見立てて、λ計算ですべて数学世界を組み立てれば、
入出力がある数学的関数も定義できるだろうから、あえて数学的正当性なんて与えようとする
理由がわからない、ということだろうと思った。
プログラムの部分は全てλ計算で組み立てれば完全に同じものが作れると思っているということ
だけれども、じゃあ文字列をディスプレイに表示するというプログラムの構成要素である
ディスプレイはハードウェア部分だけれども、それはλ計算で組み立てるという範疇にはいるんですか?
入らないなら、なにか数学的概念を持ち出してきてそれに対応付けるということをしないといけないんじゃ
ないですか?
という趣旨のことを書いた。
入出力がある数学的関数も定義できるだろうから、あえて数学的正当性なんて与えようとする
理由がわからない、ということだろうと思った。
プログラムの部分は全てλ計算で組み立てれば完全に同じものが作れると思っているということ
だけれども、じゃあ文字列をディスプレイに表示するというプログラムの構成要素である
ディスプレイはハードウェア部分だけれども、それはλ計算で組み立てるという範疇にはいるんですか?
入らないなら、なにか数学的概念を持ち出してきてそれに対応付けるということをしないといけないんじゃ
ないですか?
という趣旨のことを書いた。
485デフォルトの名無しさん
2024/10/04(金) 21:33:15.17ID:tixO3LDq これ読んだらわかるけどMoggi論文の読書感想文。いまさらの。
匿名以外でいまさら突っ込んでくるわけないじゃん。
匿名以外でいまさら突っ込んでくるわけないじゃん。
486デフォルトの名無しさん
2024/10/04(金) 21:33:16.29ID:tixO3LDq これ読んだらわかるけどMoggi論文の読書感想文。いまさらの。
匿名以外でいまさら突っ込んでくるわけないじゃん。
匿名以外でいまさら突っ込んでくるわけないじゃん。
487デフォルトの名無しさん
2024/10/04(金) 21:34:24.07ID:qBjLuAvO 関数の「型」を見ろ
入力が何で出力が何かが宣言されている
入力が何で出力が何かが宣言されている
488デフォルトの名無しさん
2024/10/04(金) 21:39:26.17ID:tixO3LDq489デフォルトの名無しさん
2024/10/04(金) 21:39:59.29ID:WSIC8Xt5 >>484
意味不明すぎる
ラムダ計算は数学的に正当化されてるだろ
例えば合流性があるとか数学的に証明されてる
これのどこに非数学的要素があるんだって言ってるんだよ
すでに数学的な説明がされてるものに対して、数学的に正当化されてないとか言うのやめろよ
意味不明すぎる
ラムダ計算は数学的に正当化されてるだろ
例えば合流性があるとか数学的に証明されてる
これのどこに非数学的要素があるんだって言ってるんだよ
すでに数学的な説明がされてるものに対して、数学的に正当化されてないとか言うのやめろよ
490デフォルトの名無しさん
2024/10/04(金) 21:48:55.49ID:tixO3LDq λ計算が数学的に正当化されてないというような話はしてなくて、
現実のプログラムをλ計算に反映させようと思っても入出力とか非決定計算の部分は表現しきれない
そのλ計算からはみ出す部分をどう正当化させようかという話。
現実のプログラムをλ計算に反映させようと思っても入出力とか非決定計算の部分は表現しきれない
そのλ計算からはみ出す部分をどう正当化させようかという話。
491デフォルトの名無しさん
2024/10/04(金) 21:52:13.21ID:WSIC8Xt5492デフォルトの名無しさん
2024/10/04(金) 22:03:12.33ID:tixO3LDq >>491
うーん。例えば、数学は集合論上で展開されているから、集合論があればその上で展開される
解析学とか、線形代数学とかいらない、みたいな論法じゃない?
この現象は、解析学でモデル化できるけれども、解析学は集合論上で展開できるから、
そんなモデル化はいらなくていちいち集合論の言葉で書けばいいじゃん的な。
みんなそこに興味あるわけじゃないと思いますよ。
うーん。例えば、数学は集合論上で展開されているから、集合論があればその上で展開される
解析学とか、線形代数学とかいらない、みたいな論法じゃない?
この現象は、解析学でモデル化できるけれども、解析学は集合論上で展開できるから、
そんなモデル化はいらなくていちいち集合論の言葉で書けばいいじゃん的な。
みんなそこに興味あるわけじゃないと思いますよ。
493デフォルトの名無しさん
2024/10/04(金) 22:08:30.14ID:vLDssEdm >>484
横からというか >460 書いた者だけど、あなたの疑問は解釈1の「アクションを受け取ってアクションを返す関数」だとざっくりし過ぎて納得いかないって感じでしょうか?
でしたら、解釈2では納得出来ませんでしょうか?
解釈2は、モナドの効能の一つに追加して「数学の世界にアウトソーシングという概念を持ち込む」というものです。
モナドの例えとして、床下配線というのがありますが、MaybeやListの様な通常のモナドも、>>=の中に関数適用部分を押し込んで、表から見えないようにしています。
(これも、見ようによってはアウトソーシングです。同じ数学の世界なので、隣の席に頼んだ感じですが)
IOモナドは、>>=の中すら見えない状態で関数適用しているわけですが、 >460 でも書いたとおり、「数学の外(ハードウェア)」で関数適用されていると考えるわけです。
IOモナドの>>= は、外の世界と遣り取りする受付窓口というわけですね。
(実際、バッファの様な振る舞いをします)
main = do x <- return 0
_________x <- return (x + 1)
_________print x
横からというか >460 書いた者だけど、あなたの疑問は解釈1の「アクションを受け取ってアクションを返す関数」だとざっくりし過ぎて納得いかないって感じでしょうか?
でしたら、解釈2では納得出来ませんでしょうか?
解釈2は、モナドの効能の一つに追加して「数学の世界にアウトソーシングという概念を持ち込む」というものです。
モナドの例えとして、床下配線というのがありますが、MaybeやListの様な通常のモナドも、>>=の中に関数適用部分を押し込んで、表から見えないようにしています。
(これも、見ようによってはアウトソーシングです。同じ数学の世界なので、隣の席に頼んだ感じですが)
IOモナドは、>>=の中すら見えない状態で関数適用しているわけですが、 >460 でも書いたとおり、「数学の外(ハードウェア)」で関数適用されていると考えるわけです。
IOモナドの>>= は、外の世界と遣り取りする受付窓口というわけですね。
(実際、バッファの様な振る舞いをします)
main = do x <- return 0
_________x <- return (x + 1)
_________print x
494デフォルトの名無しさん
2024/10/04(金) 22:14:36.08ID:WSIC8Xt5495デフォルトの名無しさん
2024/10/04(金) 22:16:42.74ID:vLDssEdm この場合、IOモナドを使って変数xを書き換えているのではなく、シャドーイングによって同じxという名前の変数を新しく作って、古い x に +1 した値を束縛しています。
496デフォルトの名無しさん
2024/10/04(金) 22:21:54.69ID:tixO3LDq >>493
ごめんなさい。全然違う。入出力を題材にしているのはあくまで例で別に疑問はないです(実装をちゃんと知っているわけではないですが)。
モナドを導入する動機はMoggi論文読んだ読書感想文なので途中まで書いてますが、圏をなすかどうかです。
ごめんなさい。全然違う。入出力を題材にしているのはあくまで例で別に疑問はないです(実装をちゃんと知っているわけではないですが)。
モナドを導入する動機はMoggi論文読んだ読書感想文なので途中まで書いてますが、圏をなすかどうかです。
497デフォルトの名無しさん
2024/10/04(金) 22:27:08.92ID:vLDssEdm 無理やりハードウェアも数学と言い張るなら、ハードウェアもチューリングマシンという計算モデルなので数学が元と言えなくはない?
そういうこじつけは置いておいても、IOモナドをアウトソーシングと考えると、じゃあ外の世界はめちゃくちゃか?と考えて、そうではないと気付く。
ハードウェアも一定の秩序がある。
数学だけが全てではないのかもしれない。
何かしらの秩序というか、法則性を持った世界(数学、数学以外含む)どうしのやり取りにモナドが橋渡しとして働いているのでは?とか、考えたりする。
そういうこじつけは置いておいても、IOモナドをアウトソーシングと考えると、じゃあ外の世界はめちゃくちゃか?と考えて、そうではないと気付く。
ハードウェアも一定の秩序がある。
数学だけが全てではないのかもしれない。
何かしらの秩序というか、法則性を持った世界(数学、数学以外含む)どうしのやり取りにモナドが橋渡しとして働いているのでは?とか、考えたりする。
498デフォルトの名無しさん
2024/10/04(金) 22:28:17.05ID:tixO3LDq >>494
モナドの原論文(Moggiの論文)の読書感想文を入出力の計算効果を題材に解説してみているんだって。
ブログに書いても今更突っ込むなんて恥ずかしいことができる人はいるわけないので、ここに書いている。
モナドの原論文(Moggiの論文)の読書感想文を入出力の計算効果を題材に解説してみているんだって。
ブログに書いても今更突っ込むなんて恥ずかしいことができる人はいるわけないので、ここに書いている。
499デフォルトの名無しさん
2024/10/04(金) 22:32:08.56ID:WSIC8Xt5 >>498
その人はHaskellは数学的に正当化されてないけしからんって言ってたの?
その人はHaskellは数学的に正当化されてないけしからんって言ってたの?
500デフォルトの名無しさん
2024/10/04(金) 22:34:04.82ID:WSIC8Xt5 最低限、論文に書いてある正しいこととお前の妄想がはっきり区別できるように感想文を書けよ
501デフォルトの名無しさん
2024/10/04(金) 22:44:05.60ID:tixO3LDq502デフォルトの名無しさん
2024/10/04(金) 22:46:51.98ID:vLDssEdm >>496
少なくともコマンド系のプログラムは圏をなしますね。
Haskellで作ると実感しますが、Haskellに限らず、
(ユーザーから見て)プログラムそのものが関数になります。
Linuxでコマンドをパイプライン処理するのは関数(射の)合成に相当しますし。
id相当のプログラムは作れますし。
・・・と考えると圏をなすと思うのですが。
(GUIプログラムもボタン単位とかで関数と言えますが、合成は…押した順序?)
例えば
{(x,2x+1) | x ∈ R} と 2x+1のグラフは同型だと直感的に分かりますが、その関数(射)は数式で表せません。
圏論では、可換図を受け取って可換図を返すとか出てきますので、{(x,2x+1) | x ∈ R} と 2x+1のグラフを結ぶ関数(射)が人間って言うのも有かな?とか、考えます。
(圏論では同型と分かれば(証明できれば)よくて、射の中身には言及しない)
少なくともコマンド系のプログラムは圏をなしますね。
Haskellで作ると実感しますが、Haskellに限らず、
(ユーザーから見て)プログラムそのものが関数になります。
Linuxでコマンドをパイプライン処理するのは関数(射の)合成に相当しますし。
id相当のプログラムは作れますし。
・・・と考えると圏をなすと思うのですが。
(GUIプログラムもボタン単位とかで関数と言えますが、合成は…押した順序?)
例えば
{(x,2x+1) | x ∈ R} と 2x+1のグラフは同型だと直感的に分かりますが、その関数(射)は数式で表せません。
圏論では、可換図を受け取って可換図を返すとか出てきますので、{(x,2x+1) | x ∈ R} と 2x+1のグラフを結ぶ関数(射)が人間って言うのも有かな?とか、考えます。
(圏論では同型と分かれば(証明できれば)よくて、射の中身には言及しない)
503デフォルトの名無しさん
2024/10/04(金) 22:50:56.01ID:WSIC8Xt5504デフォルトの名無しさん
2024/10/04(金) 22:52:29.23ID:tixO3LDq ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
505デフォルトの名無しさん
2024/10/04(金) 22:52:30.15ID:tixO3LDq ただの圏じゃなくてクライスリ圏じゃないといけない(Moggiのアイディア1から)。
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
そして、クライスリ圏を定義するためにはクライスリ・トリプル(モナド)がいる
506デフォルトの名無しさん
2024/10/04(金) 22:54:07.35ID:WSIC8Xt5 そもそもラムダ項は関数ではないし、集合ではあるということはできるけど、それは自然数1は集合であるみたいな話でそれに意義なんてないよ
507デフォルトの名無しさん
2024/10/04(金) 23:02:32.42ID:vLDssEdm >>504
>398 じゃ答えにならない?
>398 じゃ答えにならない?
508デフォルトの名無しさん
2024/10/04(金) 23:02:43.19ID:6lZW+X9H 流石にこれじゃ関数型界隈の人達にボコボコにされて終わるね
やめといた方がいい
やめといた方がいい
509デフォルトの名無しさん
2024/10/04(金) 23:04:12.66ID:tixO3LDq βη簡約するとλ項が別の簡約されたλ項になる。この対応関係を数学的関数とみなせると言ってると解釈してる。
510デフォルトの名無しさん
2024/10/04(金) 23:12:30.87ID:WSIC8Xt5511デフォルトの名無しさん
2024/10/04(金) 23:14:09.18ID:tixO3LDq 全域関数となる理由はわからん。全域関数=数学的関数ということを言いたいんだろうと思ってたけどそこから詰めてなかった。
512デフォルトの名無しさん
2024/10/04(金) 23:22:52.03ID:WSIC8Xt5 >>511
お前が言い出したんだろ
お前が言い出したんだろ
513デフォルトの名無しさん
2024/10/04(金) 23:30:08.11ID:6lZW+X9H これがワードサラダか
514デフォルトの名無しさん
2024/10/04(金) 23:41:03.02ID:tixO3LDq すまんね。準備不足だったわ。詰めるところわかったし、
詰めるところ詰めることができたらひっそりどっかに書くことにするわ。
いろいろコメント参考になったわ。
詰めるところ詰めることができたらひっそりどっかに書くことにするわ。
いろいろコメント参考になったわ。
515デフォルトの名無しさん
2024/10/05(土) 00:27:27.96ID:aeHKoAMv 集合と写像の区別がついてないんだから、何を準備しようが時間の無駄
516デフォルトの名無しさん
2024/10/05(土) 07:57:53.70ID:jwoAd9Km ZFでは集合しか無いから。写像だろうが、自然数だろうが何でも集合。全てを集合で実装する世界。
517デフォルトの名無しさん
2024/10/05(土) 08:14:37.65ID:JByJwyk5 圏論は逆で、対象(集合で言う元)を恒等写像と同一視して全てを射(写像)として扱うね。
518デフォルトの名無しさん
2024/10/05(土) 08:53:09.61ID:jwoAd9Km 対象Aに対しA=id_Aとする圏の定義は、射のクラスの上での全域的で無い結合的2項演算⚪︎を持つ代数系としての簡潔な定式化。この定義では圏には射しかなくて、対象とは恒等射の別名に過ぎない。
ただ、この圏の実装は入門者には分かり難い。
Aが圏Cの対象であることを古い文献はA in Ob(C)と書くことが多いけど、最近の文献はA in Cと書いてしまう。fが圏Cの射f:A --> Bなことはf in Hom_C(A,B)かf in Mor_C(A,B)。
ただ、この圏の実装は入門者には分かり難い。
Aが圏Cの対象であることを古い文献はA in Ob(C)と書くことが多いけど、最近の文献はA in Cと書いてしまう。fが圏Cの射f:A --> Bなことはf in Hom_C(A,B)かf in Mor_C(A,B)。
519デフォルトの名無しさん
2024/10/05(土) 10:51:32.56ID:KE+ltgGd 普通のλはどの順序で適用しても同じ計算結果になる(Church-Rosserの定理)けど
副作用を伴うλは適用順序が入れ替わると副作用の順序も変わって同じ結果とは言えなくなるから
順序を保証する仕組みとしてモナドが応用されてるはず
IO a >>= (a -> IO b) -> IO b
は(a -> IO b)が(IO a)を受け取れないから
(IO a)からaを取り出せるところまで計算しないと(a -> IO b)を適用できない
仮に
IO a -> (IO a -> IO b) -> IO b
みたいな形だと(IO a)の計算を保留したまま(IO a -> IO b)を適用できる
圏論はよく分からないけど
圏Aに便宜的な時間軸をつけたA_t0, A_t1, A_t2, …を用意して関手
A_t0 → A_t1, A_t1 → A_t2, …
を作るとA_t0, A_t1…は全部AのクローンだからA_t0 → A_t1, …は自己関手になって
その自己関手の集合がなんやかんやでモナドに相当するみたいなイメージ
副作用を伴うλは適用順序が入れ替わると副作用の順序も変わって同じ結果とは言えなくなるから
順序を保証する仕組みとしてモナドが応用されてるはず
IO a >>= (a -> IO b) -> IO b
は(a -> IO b)が(IO a)を受け取れないから
(IO a)からaを取り出せるところまで計算しないと(a -> IO b)を適用できない
仮に
IO a -> (IO a -> IO b) -> IO b
みたいな形だと(IO a)の計算を保留したまま(IO a -> IO b)を適用できる
圏論はよく分からないけど
圏Aに便宜的な時間軸をつけたA_t0, A_t1, A_t2, …を用意して関手
A_t0 → A_t1, A_t1 → A_t2, …
を作るとA_t0, A_t1…は全部AのクローンだからA_t0 → A_t1, …は自己関手になって
その自己関手の集合がなんやかんやでモナドに相当するみたいなイメージ
520デフォルトの名無しさん
2024/10/05(土) 11:23:42.68ID:KE+ltgGd どうでもいいけど計算科学のside effect→副作用は誤訳だと思う
薬学のside effectは「随伴作用」(副作用)だけど計算科学のside effectは「側面作用」って感じ
薬学のside effectは「随伴作用」(副作用)だけど計算科学のside effectは「側面作用」って感じ
521デフォルトの名無しさん
2024/10/05(土) 11:40:17.86ID:gdCH0E84 圏論のコンコルド効果について。
Haskellのコーティングの質をあげようと、
一生懸命頑張って勉強したのに実はほとんど役に立たない…
「大量の時間と労力を学習したのに悔しい!」
そのことを認めることができず、懸命に圏論のプログラミングでの有用性を力説し、学習布教に努める。
Haskellのコーティングの質をあげようと、
一生懸命頑張って勉強したのに実はほとんど役に立たない…
「大量の時間と労力を学習したのに悔しい!」
そのことを認めることができず、懸命に圏論のプログラミングでの有用性を力説し、学習布教に努める。
522デフォルトの名無しさん
2024/10/05(土) 13:16:57.88ID:AoKf42Y0 >>519
異なる順序でreductionする方法がある場合は、どの順序でreductionしても同じ結果になるだろ?
IO a >>= (a -> IO b) -> IO bなら当たり前だけど(a -> IO b) -> IO bをa -> IO bに先にreduction可能
異なる順序でreductionする方法がある場合は、どの順序でreductionしても同じ結果になるだろ?
IO a >>= (a -> IO b) -> IO bなら当たり前だけど(a -> IO b) -> IO bをa -> IO bに先にreduction可能
523デフォルトの名無しさん
2024/10/05(土) 13:51:21.32ID:2BBo/yBe 数日程度で成果を出す戦略を採用したにもかかわらず何年も戦争が続く
こういうのは圏論に限定されない現象だ
順序を入れかえたら結果が変わる
数日後の情報が今ここに伝わるならそれは時間軸とは言えないぞ
こういうのは圏論に限定されない現象だ
順序を入れかえたら結果が変わる
数日後の情報が今ここに伝わるならそれは時間軸とは言えないぞ
524デフォルトの名無しさん
2024/10/05(土) 14:41:11.81ID:hOtauQiF >>522
IO a >>= (a -> IO b) -> IO b
は
(IO a >>= (a -> IO b)) -> IO b
であって
IO a >>= ((a -> IO b) -> IO b)
にはならないよ
(>>=)は演算子
IO a >>= (a -> IO b) -> IO b
は
(IO a >>= (a -> IO b)) -> IO b
であって
IO a >>= ((a -> IO b) -> IO b)
にはならないよ
(>>=)は演算子
525デフォルトの名無しさん
2024/10/05(土) 15:10:26.09ID:u1hwkRNd 圏論の話題出すなよ
Haskellで何か書くにあたって利益があるわけじゃないんだから
Haskellで何か書くにあたって利益があるわけじゃないんだから
526デフォルトの名無しさん
2024/10/05(土) 15:30:46.49ID:2BBo/yBe 利益は道徳よりも軽い
これも、未来予知ができなければ利益を計算できないことに原因がある
これも、未来予知ができなければ利益を計算できないことに原因がある
527デフォルトの名無しさん
2024/10/05(土) 17:25:54.13ID:JByJwyk5 >>521
役に立つなら、もっと色々入ってるかと…。
私はむしろHaskellより圏論そのものに興味の対象が移って、Haskellは圏論の概念を実際に動かしてみるための道具に成り下がってますね^^;
とはいえ、数学の知識不足なので群論やらトポロジーやらあっちこっち読み漁りながらなので、歩みは遅いですが…。
役に立つなら、もっと色々入ってるかと…。
私はむしろHaskellより圏論そのものに興味の対象が移って、Haskellは圏論の概念を実際に動かしてみるための道具に成り下がってますね^^;
とはいえ、数学の知識不足なので群論やらトポロジーやらあっちこっち読み漁りながらなので、歩みは遅いですが…。
528デフォルトの名無しさん
2024/10/05(土) 20:22:21.95ID:J2mQEu2j >>527
面倒でも一般位相の基本、ホモロジーの初歩…と地道にやるのをおすすめします
面倒でも一般位相の基本、ホモロジーの初歩…と地道にやるのをおすすめします
529デフォルトの名無しさん
2024/10/05(土) 20:30:18.78ID:aeHKoAMv 集合と写像の区別もついてないんだから、集合と位相からやらないとだめ
530デフォルトの名無しさん
2024/10/05(土) 22:07:16.25ID:JByJwyk5531デフォルトの名無しさん
2024/10/05(土) 22:16:56.83ID:aeHKoAMv532デフォルトの名無しさん
2024/10/05(土) 23:30:55.73ID:bPGp2ASj >>373=396=530 っぽいから言うと、(数学に関して)「分かった」「理解した」の自己基準が不安しかない
> ほら、分かってみれば「なーんだ。そんなことか」でしょ?
> なるほど、って感じ。
と自分に言い聞かせていても、ポピュラーサイエンス書感覚で読んだってダメ
他人との議論では、逆に「こいつ分かってないな」と思われるだけだからな
> ほら、分かってみれば「なーんだ。そんなことか」でしょ?
> なるほど、って感じ。
と自分に言い聞かせていても、ポピュラーサイエンス書感覚で読んだってダメ
他人との議論では、逆に「こいつ分かってないな」と思われるだけだからな
533デフォルトの名無しさん
2024/10/05(土) 23:50:06.63ID:JByJwyk5 >>532
独学ですしね^^;
こいつ分かってないなと思われても良いですよ?
それで指摘されたものも新しい知識になるので。
どうも定義を読むだけじゃイメージ湧かないので、ネット上や数学書の複数の例え話が全て真だと仮定して、共通の特徴からイメージを掴むパターンが多いんです。
独学ですしね^^;
こいつ分かってないなと思われても良いですよ?
それで指摘されたものも新しい知識になるので。
どうも定義を読むだけじゃイメージ湧かないので、ネット上や数学書の複数の例え話が全て真だと仮定して、共通の特徴からイメージを掴むパターンが多いんです。
534デフォルトの名無しさん
2024/10/06(日) 01:53:03.98ID:6zQjUfx4 いま正常性バイアスを理解した
全て正常だと仮定する
なるほど
全て正常だと仮定する
なるほど
535デフォルトの名無しさん
2024/10/06(日) 10:54:18.58ID:jCq2z3ec 本来Haskell使う上で必要のない数学の知識をかじらされるのかわいそう
こうやって無駄に間口狭めてなんの意味があるんだか
こうやって無駄に間口狭めてなんの意味があるんだか
536デフォルトの名無しさん
2024/10/06(日) 11:09:45.81ID:y6HCCYtz537デフォルトの名無しさん
2024/10/06(日) 12:50:07.74ID:6zQjUfx4538デフォルトの名無しさん
2024/10/06(日) 13:58:19.62ID:jCq2z3ec まず圏論が必要ないっての
539デフォルトの名無しさん
2024/10/06(日) 14:19:17.49ID:6zQjUfx4 それは極論だがそれを許容する代わりに反対側の極論も許容してもらう
ダブルヘイターとは違うのだよ
ダブルヘイターとは違うのだよ
540デフォルトの名無しさん
2024/10/07(月) 16:51:22.87ID:89HfDe1C >>539
君頭悪いなら無理に書き込まないほうがいいよ
君頭悪いなら無理に書き込まないほうがいいよ
541デフォルトの名無しさん
2024/10/08(火) 16:34:43.77ID:uOPPJ/Hn 圏論好きはHaskellよりCPLで幸せになれる
542デフォルトの名無しさん
2024/10/08(火) 19:19:24.66ID:fXGz3G0z >>529
集合と写像って違うんですか?写像って集合ではなかったですか?
集合と写像って違うんですか?写像って集合ではなかったですか?
543デフォルトの名無しさん
2024/10/08(火) 19:24:10.23ID:u3fJk7wa >>541
CPLとは?kwsk
CPLとは?kwsk
544デフォルトの名無しさん
2024/10/08(火) 19:35:49.07ID:i8KKt4Pq545デフォルトの名無しさん
2024/10/08(火) 20:00:43.25ID:fXGz3G0z >>544
なるほど。勉強になります。
なるほど。勉強になります。
546デフォルトの名無しさん
2024/10/08(火) 20:58:36.65ID:uOPPJ/Hn >>543
CPL (圏論プログラミング言語)
https://ja.m.wikipedia.org/wiki/CPL_(%E5%9C%8F%E8%AB%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)
CPL (圏論プログラミング言語)
https://ja.m.wikipedia.org/wiki/CPL_(%E5%9C%8F%E8%AB%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)
547デフォルトの名無しさん
2024/10/08(火) 21:59:10.54ID:fIGAPb3c CPL使ったことは一度もないが
関手圏よりもっとややこしい圏で、モナドより凡庸なものを定義するんでしょ
関手圏よりもっとややこしい圏で、モナドより凡庸なものを定義するんでしょ
548デフォルトの名無しさん
2024/10/08(火) 23:08:48.38ID:Fz/Eetv9 こんなんだけど
>通常では,自然数などのデータ型は,効率のためにシステムに組込んであるが,CPLでは定義しなければならない.
>また,定義したとしても,機械本来の足し算,かけ算を使用できず,独自に定義しなければならない.
>通常では,自然数などのデータ型は,効率のためにシステムに組込んであるが,CPLでは定義しなければならない.
>また,定義したとしても,機械本来の足し算,かけ算を使用できず,独自に定義しなければならない.
549デフォルトの名無しさん
2024/10/09(水) 00:11:45.00ID:NBQjGpZO O'CAMLのCAMLはCategorical Abstract Machine Languageの略ということを忘れてはかわいそう。
550デフォルトの名無しさん
2024/10/09(水) 20:31:07.90ID:UpCIlB6y >>546
Thenks!!
Thenks!!
551デフォルトの名無しさん
2024/10/12(土) 20:07:00.42ID:fyUcodga 初心者はStack、ガチムチはCabalで開発するんですか?
552デフォルトの名無しさん
2024/10/15(火) 05:30:10.38ID:CzVFQLgH みんなStackだよ
Cabalの依存関係解決はましになったとはいえプロジェクト構成の記述はStackのほうがよくできてるし
Cabalの依存関係解決はましになったとはいえプロジェクト構成の記述はStackのほうがよくできてるし
553デフォルトの名無しさん
2024/10/15(火) 22:34:15.38ID:2I09ehic 詳しい情報サンクス
CabalやめてStackに帰ります
GHCup tuiで選べるCabalやHLSやStackも全部recommendedに落とします
CabalやめてStackに帰ります
GHCup tuiで選べるCabalやHLSやStackも全部recommendedに落とします
554デフォルトの名無しさん
2024/10/16(水) 05:04:51.74ID:PvdZsye3 ああCabal辞めてStackに移行したらビルドし直しただけでTLSのハンドシェイクがTwitchでは大丈夫なのにツイキャスで失敗する謎の不具合が治りました
やっぱStackすわ
やっぱStackすわ
555デフォルトの名無しさん
2024/10/18(金) 18:33:56.50ID:358zSdqs 別に不具合あったわけじゃないならよくね
みんなとか言い出したらそもそもみんなhaskellなんか使ってないが
みんなとか言い出したらそもそもみんなhaskellなんか使ってないが
556デフォルトの名無しさん
2024/10/25(金) 23:46:50.40ID:jl3K3ThU Haskellを学んだみたいと思うんだけど、「すごいHaskell たのしく学ぼう」って書籍は今でも有用?
Haskellの良書として挙げることは多いと思うけど、出版から10年以上経ってるのが気になった
その間で言語に大きな変更があったとか、「今のHaskellだったらこう書くよね」みたいな注意が必要な点などあれば知りたい
あるいは最近の書籍でよりおすすめというものでも
Haskellの良書として挙げることは多いと思うけど、出版から10年以上経ってるのが気になった
その間で言語に大きな変更があったとか、「今のHaskellだったらこう書くよね」みたいな注意が必要な点などあれば知りたい
あるいは最近の書籍でよりおすすめというものでも
ちょっと古い情報だけど、
僕が「すごいH」を購入したのが2016.12だけど、数年後には章立ての変更まではなかったかもしれないけど、コードの記述など結構アップデートされてたような
いずれにしても、一冊でHaskellを、ってのはアレで、何冊かは読まないとと僕の場合
僕が「すごいH」を購入したのが2016.12だけど、数年後には章立ての変更まではなかったかもしれないけど、コードの記述など結構アップデートされてたような
いずれにしても、一冊でHaskellを、ってのはアレで、何冊かは読まないとと僕の場合
558デフォルトの名無しさん
2024/10/26(土) 01:14:59.65ID:jaMDzNJq559デフォルトの名無しさん
2024/10/26(土) 13:33:26.33ID:qze4GRwI モナドはCのポインタより概念が難しいのどうにかならんの
別のはないんですか
別のはないんですか
560デフォルトの名無しさん
2024/10/26(土) 14:33:50.42ID:jaMDzNJq ない
別に理論的な部分はすっ飛ばしていいよ
純粋関数型言語で手続き型言語のようなシーケンスをどうやったら書けるか?みたいなパズルを解く方法と思ってればいい
全てはdo記法にため
別に理論的な部分はすっ飛ばしていいよ
純粋関数型言語で手続き型言語のようなシーケンスをどうやったら書けるか?みたいなパズルを解く方法と思ってればいい
全てはdo記法にため
レスを投稿する
ニュース
- 出生数が過去最低を更新 子どもはほしいのに金銭問題がネック 抜け出せない"少子化の罠" [首都圏の虎★]
- インドネシア、BRICS加盟 [首都圏の虎★]
- 「人が住み着いています、助けて下さい」無人精米所を占拠する男 警察官が追い出すも再び占拠 茨城 [七波羅探題★]
- 「なぜ売却したいのか」 USスチール買収で―トランプ次期米大統領 [蚤の市★]
- 中国でインフルエンザ様の未知のウイルス「HMPV」流行の懸念 [パンナ・コッタ★]
- 【青森】「なんでこんなに除雪入らないのか」「頭にくる」今年1度も除雪が入らない生活道路も… 除雪に9,151件の苦情 ★2 [nita★]
- ひろゆき(48)「砂糖ってファミレスから盗めば無限にタダで手に入るんですよね。砂糖買ってる人あれ全員バカです笑」 [517459952]
- 【悲報】日本、1月も記録的な値上げラッシュ… 公務員以外もはや健康で文化的な生活ができなくなる [452836546]
- 退職代行モームリ、激ヤバサービス開始 退職代行利用実績データを開示 [402859164]
- 源田、妻の衛藤美彩に「弁護士と話して欲しい」と男らしくLINEで伝える
- 【正論】社民党副党首・大椿ゆうこ議員「闘いから逃げ回る日本人が負け組なのは当然のこと、断じて外国人のせいではない😡」 [339712612]
- 【📦】Amazon初売り、令和7年のお正月を全て過去にする最終日に突入!!!