関数型プログラミング言語Haskell Part34
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 代入が書けるんだから、入出力なんて自明だろ…
こいつ何いってんだ…
こいつ何いってんだ…
439デフォルトの名無しさん
2024/10/03(木) 00:02:36.12ID:B2Xmf+Xl だから、入出力がある数学的関数なんてないだろって言ってんの。
数学的関数で入出力は非自明だと思うんだが。
数学的関数で入出力は非自明だと思うんだが。
440デフォルトの名無しさん
2024/10/03(木) 00:09:13.65ID:B2Xmf+Xl Haskellでいうと、
純粋関数は、λ式(valueからvalueへの数学的関数)
に対応付けられるけど、
IOモナド使ったプログラムは、その現実のプログラムが持つ特徴を表現できるλ式がないので対応付けられない
って言ってんの。
純粋関数は、λ式(valueからvalueへの数学的関数)
に対応付けられるけど、
IOモナド使ったプログラムは、その現実のプログラムが持つ特徴を表現できるλ式がないので対応付けられない
って言ってんの。
441デフォルトの名無しさん
2024/10/03(木) 00:21:32.37ID:omgk7HiD 入出力なんてただの値のリストだろ…
442デフォルトの名無しさん
2024/10/03(木) 03:50:19.64ID:KCHr29fD 圏論持ち出して愚にもつかないことをグダグダと…
それで何か効率良くなるならいいんだけど,何のメリットもないんだよね
それで何か効率良くなるならいいんだけど,何のメリットもないんだよね
443デフォルトの名無しさん
2024/10/03(木) 04:21:38.74ID:zyXzLypu 圏論なんかより、遅延評価ならIOがwhnfの先頭に出てきたら実行すればいいって人類が気づいたのが本質なんじゃねーの
444デフォルトの名無しさん
2024/10/03(木) 08:29:58.17ID:LNI2TnSo 最近の人類はseqのメリットを直接的に利用するコツに気づいとるんか
順調に進化しとるな
順調に進化しとるな
445デフォルトの名無しさん
2024/10/03(木) 14:31:37.97ID:1wv2Oz28 コンパクトな言語仕様だが表現力は強力
数学をプログラミングに取り入れるメリットってまぁこんなもんでしかないでしょ
一方で静的に性質を決定しようとするやり方は一般的な人間の能力を簡単に超えてしまう
数学をプログラミングに取り入れるメリットってまぁこんなもんでしかないでしょ
一方で静的に性質を決定しようとするやり方は一般的な人間の能力を簡単に超えてしまう
446デフォルトの名無しさん
2024/10/03(木) 16:46:40.39ID:TkNlnb1D 急にポエマーだらけw
447デフォルトの名無しさん
2024/10/03(木) 19:56:29.70ID:B2Xmf+Xl 入出力があるプログラムをどう数学的に整合する概念に対応させるかについて書いてみる。
こういう説明が通るものなのか興味があるし。
まず、仮想的なシェルスクリプト風の行番号付き手続き型言語を想定して、
その言語で入出力があるプログラムを定義するとする。
000 procedure prog1(int n) {
001 double res
002 (なにか込み入った計算)
....
020 echo "hogehoge"
021 (なにか込み入った計算)
....
050 echo "fugafuga"
051 (なにか込み入った計算)
...
100 return res }
このプログラムは実行 $(prog1) すると、行番号001版から順に評価していって複雑な計算をしつつ途中
hogehoge ← 行番号020の命令を評価
fugafuga ← 行番号050の命令を評価
と表示した上で、返り値 res を返す、という動作をする。
こういう説明が通るものなのか興味があるし。
まず、仮想的なシェルスクリプト風の行番号付き手続き型言語を想定して、
その言語で入出力があるプログラムを定義するとする。
000 procedure prog1(int n) {
001 double res
002 (なにか込み入った計算)
....
020 echo "hogehoge"
021 (なにか込み入った計算)
....
050 echo "fugafuga"
051 (なにか込み入った計算)
...
100 return res }
このプログラムは実行 $(prog1) すると、行番号001版から順に評価していって複雑な計算をしつつ途中
hogehoge ← 行番号020の命令を評価
fugafuga ← 行番号050の命令を評価
と表示した上で、返り値 res を返す、という動作をする。
448デフォルトの名無しさん
2024/10/03(木) 19:57:08.78ID:B2Xmf+Xl 現実のよくあるプログラムとはこういう感じのものだけれども、実行 $(prog1) をしてその結果が返ってくるという現実的に
必要な点だけを考えると、途中の行番号020を評価したとかそういう情報はいらなくて、結局 $(prog1) して
hogehoge
fugafuga
を表示して、複雑な計算の結果 res が返ってくれさえすればいいともいえる。
だったら、数学的に取り扱いがしづらい、式の評価途中で入出力が発生するみたいな部分を取っ払って
000 procedure prog2(int n) {
001 double res
002 (なにか込み入った計算)
....
020 ## echo "hogehoge" #コメントアウト
021 (なにか込み入った計算)
....
050 ## echo "fugafuga" #コメントアウト
051 (なにか込み入った計算)
...
100 return ("hogehoge"を表示する予約1、"fugafuga"を表示する予約2、返り値 res) }
というように、返り値の部分に全部まとめるということをするということが考えられる。こうしても、プログラムのユーザー側からすると
実行すると$(prog2)
hogehoge
fugafuga
と表示されて複雑な計算した結果 res が返ってくるということは変わらない。
必要な点だけを考えると、途中の行番号020を評価したとかそういう情報はいらなくて、結局 $(prog1) して
hogehoge
fugafuga
を表示して、複雑な計算の結果 res が返ってくれさえすればいいともいえる。
だったら、数学的に取り扱いがしづらい、式の評価途中で入出力が発生するみたいな部分を取っ払って
000 procedure prog2(int n) {
001 double res
002 (なにか込み入った計算)
....
020 ## echo "hogehoge" #コメントアウト
021 (なにか込み入った計算)
....
050 ## echo "fugafuga" #コメントアウト
051 (なにか込み入った計算)
...
100 return ("hogehoge"を表示する予約1、"fugafuga"を表示する予約2、返り値 res) }
というように、返り値の部分に全部まとめるということをするということが考えられる。こうしても、プログラムのユーザー側からすると
実行すると$(prog2)
hogehoge
fugafuga
と表示されて複雑な計算した結果 res が返ってくるということは変わらない。
449デフォルトの名無しさん
2024/10/03(木) 19:57:34.71ID:B2Xmf+Xl というわけで、入出力があるプログラムというのは、こういう返り値の部分というか評価の最終段階の部分に「入出力の予約情報と返り値の情報がまとめられたもの」だったんだ、と整理しよう。
ただ、こういう「入出力の予約情報と返り値の情報がまとめられたもの」と長い文で表すのはよろしくないので、何か名前を与えた方がいいということで
computationと呼ぶことにする。
そうすると、Haskellでいえば、
純粋関数は、valueからvalueへの数学的関数
に割り当てることができたけれど、
入出力付きのプログラムについては、valueからcomputationへの対応
に割り当てるということが数学的に正当化できそうだ、ということになるわけだ。
ただ、こういう「入出力の予約情報と返り値の情報がまとめられたもの」と長い文で表すのはよろしくないので、何か名前を与えた方がいいということで
computationと呼ぶことにする。
そうすると、Haskellでいえば、
純粋関数は、valueからvalueへの数学的関数
に割り当てることができたけれど、
入出力付きのプログラムについては、valueからcomputationへの対応
に割り当てるということが数学的に正当化できそうだ、ということになるわけだ。
450デフォルトの名無しさん
2024/10/03(木) 20:00:39.07ID:B2Xmf+Xl 訂正
computationというか、今でいう「入出力の予約情報と返り値の情報がまとめられたもの」を
数学的にうまく正当化するということが達成することができるのであれば、
入出力つきのプログラムを、valueからcomputationへの対応
に割り当てるということが正当化できるはずだ、と考えられる。
computationというか、今でいう「入出力の予約情報と返り値の情報がまとめられたもの」を
数学的にうまく正当化するということが達成することができるのであれば、
入出力つきのプログラムを、valueからcomputationへの対応
に割り当てるということが正当化できるはずだ、と考えられる。
451デフォルトの名無しさん
2024/10/03(木) 20:23:28.46ID:zyXzLypu 何言ってるのか全然わからん
ぶっちゃけ入力は関数の引数にして、出力は返り値にするように変換するだけでいいだろ
読み出し位置のカーソル管理が必要なら代入を使えばできるじゃん
ぶっちゃけ入力は関数の引数にして、出力は返り値にするように変換するだけでいいだろ
読み出し位置のカーソル管理が必要なら代入を使えばできるじゃん
452デフォルトの名無しさん
2024/10/03(木) 20:39:38.40ID:B2Xmf+Xl よくわかんないけど、そういう入出力プログラムがあったとする。
そしてそれを引数付きで実行することを考えると
$(prog n)
こうなる。ここで、引数の部分の n はプログラムの記述に属さないといけない。
なぜかというと現実世界の「入力」部分をそのまま引数のところには持ってこれないから。
引数部分を入力にするにしても、別途入力されたものをプログラムの変数に割り当てる概念
みたいなのが必要になるし、それは関数の引数だからということでは説明にならないと思う。
だから、少なくともprogの引数部分はvalueじゃないといけない。
そしてそれを引数付きで実行することを考えると
$(prog n)
こうなる。ここで、引数の部分の n はプログラムの記述に属さないといけない。
なぜかというと現実世界の「入力」部分をそのまま引数のところには持ってこれないから。
引数部分を入力にするにしても、別途入力されたものをプログラムの変数に割り当てる概念
みたいなのが必要になるし、それは関数の引数だからということでは説明にならないと思う。
だから、少なくともprogの引数部分はvalueじゃないといけない。
453デフォルトの名無しさん
2024/10/03(木) 20:45:47.19ID:zyXzLypu ポエムすぎて意味わからん。値のリストはvalueじゃないと?
454デフォルトの名無しさん
2024/10/03(木) 20:59:58.72ID:B2Xmf+Xl 値のリスト自体をそのまま持ってくればvalueということになるんだろうけれど、
$(prog n)
の実行結果として出てくるもので、計算効果の説明になるものであって、返り値の型を包含するもの
であればcomputationと判断せざるを得ないとかそういうことしか言えないです。
$(prog n)
の実行結果として出てくるもので、計算効果の説明になるものであって、返り値の型を包含するもの
であればcomputationと判断せざるを得ないとかそういうことしか言えないです。
455デフォルトの名無しさん
2024/10/03(木) 21:11:15.46ID:zyXzLypu 判断するって何言ってるの?
computationって定義は何なの?
ラムダ項を書き換えていく手続きが計算じゃないの?
computationって定義は何なの?
ラムダ項を書き換えていく手続きが計算じゃないの?
456デフォルトの名無しさん
2024/10/03(木) 21:22:37.64ID:B2Xmf+Xl valueとcomputationの違いは微妙で$(prog n)の実行結果として出てくるかどうかとか
計算効果が発露しているかというところで見極めるしかない、と理解している。判断する
というのは専門用語としては使ってない。
computationの定義はまた微妙だけれど、$(prog n)の計算効果込みの実行結果みたいな概念。
最後は超個人的見解だけど、「λ項を書き換えていく行為」というのは、どういう方法で表現して
どういう方法で簡約していくか?というところが決まってない。λ計算じゃないけれど、
1+1=2
という計算を暗算でやるか、電卓でやるか、そろばんでやるかという違いを出しても計算することに
変わりない。
暗算でやると、脳内物質の分量が変わるし、電卓だと電位が変わる。そして、そろばんでやると
「ぱちぱち」という音が出る。
計算効果が発露しているかというところで見極めるしかない、と理解している。判断する
というのは専門用語としては使ってない。
computationの定義はまた微妙だけれど、$(prog n)の計算効果込みの実行結果みたいな概念。
最後は超個人的見解だけど、「λ項を書き換えていく行為」というのは、どういう方法で表現して
どういう方法で簡約していくか?というところが決まってない。λ計算じゃないけれど、
1+1=2
という計算を暗算でやるか、電卓でやるか、そろばんでやるかという違いを出しても計算することに
変わりない。
暗算でやると、脳内物質の分量が変わるし、電卓だと電位が変わる。そして、そろばんでやると
「ぱちぱち」という音が出る。
457デフォルトの名無しさん
2024/10/03(木) 21:30:24.72ID:zyXzLypu ❌決まってない
⭕知らない
間違えるなよ
⭕知らない
間違えるなよ
458デフォルトの名無しさん
2024/10/03(木) 21:31:19.82ID:zyXzLypu お前の脳内にしかないお花畑に巻き込むのやめてもらっていいですか?
459デフォルトの名無しさん
2024/10/03(木) 22:10:04.42ID:/brOvmjG おそらくメンタルヘルスに問題がある方なのかな?
自分の頭の中の映像をそのまま言葉にしたような感じを受ける
自分の頭の中の映像をそのまま言葉にしたような感じを受ける
460デフォルトの名無しさん
2024/10/04(金) 05:46:29.14ID:vLDssEdm >>428
Haskellの副作用については2つの解釈がある。
1.副作用も含めてアクションという単位で値としてみる。
(アクションを受け取って、アクションを返す関数)
2.Haskellは指示書を発行しているだけで、実際に実行するのは数学(Hakell)の外だから、Haskellそのものには副作用が無い。
((末尾にHaskellに値を返す形の)マシン語を返して、ハードウェアに実行してもらうと考えるアウトソーシング方式)
Haskellの副作用については2つの解釈がある。
1.副作用も含めてアクションという単位で値としてみる。
(アクションを受け取って、アクションを返す関数)
2.Haskellは指示書を発行しているだけで、実際に実行するのは数学(Hakell)の外だから、Haskellそのものには副作用が無い。
((末尾にHaskellに値を返す形の)マシン語を返して、ハードウェアに実行してもらうと考えるアウトソーシング方式)
461デフォルトの名無しさん
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記法にため
561デフォルトの名無しさん
2024/10/26(土) 18:20:45.25ID:QG40CL6R >>559
だったらCleanはどうでせう?
モナドの代わりに線形何たらっての使ってる。
副作用関数を使い捨て関数と捉える概念らしいけど…。
変数は引数のない関数と捉えられるので、入力関数も外部で代入する変数と捉えられる。
んで、
return 0 >>= \x -> return (x + 1) >>= \x -> return (x + 1) = 2
は
return 0 >>= (\x -> return (x + 1) >>= (\x -> return (x + 1)))
と解釈されて、(\x -> ...) 部分が1個のラムダ式(関数)の上に階層構造なので、同名の変数 x はシャドーイングで古い値は隠される。
(そして隠されたら他から参照されなくなるのでGCでメモリを解放される)
IOモナドな入力関数も引数が無いので、値を外部で代入する変数と捉え、シャドーイングで古い値は隠されると考えると、線形何たらの使い捨て副作用関数と同じことしてる。
だったらCleanはどうでせう?
モナドの代わりに線形何たらっての使ってる。
副作用関数を使い捨て関数と捉える概念らしいけど…。
変数は引数のない関数と捉えられるので、入力関数も外部で代入する変数と捉えられる。
んで、
return 0 >>= \x -> return (x + 1) >>= \x -> return (x + 1) = 2
は
return 0 >>= (\x -> return (x + 1) >>= (\x -> return (x + 1)))
と解釈されて、(\x -> ...) 部分が1個のラムダ式(関数)の上に階層構造なので、同名の変数 x はシャドーイングで古い値は隠される。
(そして隠されたら他から参照されなくなるのでGCでメモリを解放される)
IOモナドな入力関数も引数が無いので、値を外部で代入する変数と捉え、シャドーイングで古い値は隠されると考えると、線形何たらの使い捨て副作用関数と同じことしてる。
562デフォルトの名無しさん
2024/10/28(月) 07:23:18.71ID:duvMwVsG563デフォルトの名無しさん
2024/10/28(月) 11:18:21.59ID:ABlPDVd9 すごいエロい本か
564デフォルトの名無しさん
2024/10/28(月) 16:01:27.57ID:3PX2guVI >>563
それ面白いと思ってレスしてんの?
それ面白いと思ってレスしてんの?
565デフォルトの名無しさん
2024/10/28(月) 17:13:55.02ID:B1OBTGXf 10年前のtwitterでは鉄板ジョークでしたよ
すごいH
すごいH
566デフォルトの名無しさん
2024/10/28(月) 19:07:28.37ID:aKxYxFxQ haskell知らない人はエロ本だと思うし
隠れた卑猥な意味が無ければ
隠語としての価値も無い
隠れた卑猥な意味が無ければ
隠語としての価値も無い
567デフォルトの名無しさん
2024/10/28(月) 19:57:49.83ID:2RuMUG8y ML族のRustが市民権を得た今haskellやる意味ないよ
その時間をRustに当てなさい
その時間をRustに当てなさい
568デフォルトの名無しさん
2024/10/28(月) 21:28:05.60ID:B1OBTGXf 平均的HaskellerはRustもやった上でLinearTypes拡張がどうなるか様子見しつつ両方使ってるのでは?
https://zenn.dev/konn/articles/2023-10-01-linear-haskell-in-2023
https://zenn.dev/konn/articles/2023-10-01-linear-haskell-in-2023
569デフォルトの名無しさん
2024/10/28(月) 22:50:50.12ID:duvMwVsG Haskellスレで言われましても
わざわざカレー屋に来て「ラーメンを食え」って喧伝するようなものでしょ
わざわざカレー屋に来て「ラーメンを食え」って喧伝するようなものでしょ
570デフォルトの名無しさん
2024/10/29(火) 10:29:33.30ID:2QinlXet >>567
ほんそれ
ほんそれ
571デフォルトの名無しさん
2024/10/29(火) 11:58:27.10ID:IrbjK6II Rustを関数型扱いするやつは
Rustも関数型もまるで理解してない
だから誰も真面目には相手してくれない
Rustも関数型もまるで理解してない
だから誰も真面目には相手してくれない
572デフォルトの名無しさん
2024/10/29(火) 12:22:05.93ID:dZcxKFDp そう。世界がHaskellから孤立していく
世界はもっと危機感もった方が良いよ
世界はもっと危機感もった方が良いよ
573デフォルトの名無しさん
2024/10/29(火) 15:30:57.70ID:+9FvEifI 実用プログラムに使った例はあるの?
574デフォルトの名無しさん
2024/10/29(火) 16:00:48.67ID:FJXFYfo2575デフォルトの名無しさん
2024/10/29(火) 22:29:59.15ID:LPWWq4s4 >>573
自分も詳しくはないけど、クローズドな分野が多いんじゃない?
自分も詳しくはないけど、クローズドな分野が多いんじゃない?
576デフォルトの名無しさん
2024/10/29(火) 23:08:38.64ID:+9FvEifI >>575
秘密ということ、それじゃわからんと同じことじゃないか
秘密ということ、それじゃわからんと同じことじゃないか
577デフォルトの名無しさん
2024/10/29(火) 23:25:09.95ID:6SLkDv7J 世界は頭悪すぎてHaskellを使いこなせていない
世界はもっと危機感を持った方が良い
世界はもっと危機感を持った方が良い
578デフォルトの名無しさん
2024/10/30(水) 02:10:51.19ID:p9nsrTZ/ 急に主語が大きくなったぞωωω=2πf
579デフォルトの名無しさん
2024/11/02(土) 09:15:14.82ID:KpOoS8wa クローズドな部分なら使ったうちには入らないな
580デフォルトの名無しさん
2024/11/02(土) 18:11:47.64ID:3NvQMTDb 金融工学で使ってるとこあるかもね
OCamlが定番らしいし
OCamlが定番らしいし
581デフォルトの名無しさん
2024/11/02(土) 19:19:33.26ID:Mufqfjtq582デフォルトの名無しさん
2024/11/02(土) 19:33:48.22ID:pIz290+w583デフォルトの名無しさん
2024/11/02(土) 19:38:33.59ID:3NvQMTDb584デフォルトの名無しさん
2024/11/02(土) 20:11:17.53ID:pIz290+w >>581
どっちかというと、教育に興味があって、例えば足し算の足し方が増加と追加って2種類あるんだけど、追加は後から増えるって意味だと教科書に書いてあるけど、その説明がもやもやする。
それで、違いを考えるとこれは
増加の足し算:末尾再帰。その場で簡約出来る
3 + 2 = (3 + 1) + (2- 1) = 4 + 1 = (4 + 1) + (1 -1) = 5 + 0 = 5
追加の足し算:再帰。基底部まで来てから簡約開始。リストの ++ 演算子的な動き。
2 + 3 = 1 + ((2 - 1) + 3) = 1 + (1 + ((1 - 1) + 3)) = 1 + (1 + (0 + 3)) = 1 + (1 + 3) = 1 + 4 = 5
みたいに、足し算作らないと気付かない違いを気付いて教えるのに役立ててる。
(+1/-1の代わりにsucc/pred関数の適用で考えた方が分かり易いかも)
どっちかというと、教育に興味があって、例えば足し算の足し方が増加と追加って2種類あるんだけど、追加は後から増えるって意味だと教科書に書いてあるけど、その説明がもやもやする。
それで、違いを考えるとこれは
増加の足し算:末尾再帰。その場で簡約出来る
3 + 2 = (3 + 1) + (2- 1) = 4 + 1 = (4 + 1) + (1 -1) = 5 + 0 = 5
追加の足し算:再帰。基底部まで来てから簡約開始。リストの ++ 演算子的な動き。
2 + 3 = 1 + ((2 - 1) + 3) = 1 + (1 + ((1 - 1) + 3)) = 1 + (1 + (0 + 3)) = 1 + (1 + 3) = 1 + 4 = 5
みたいに、足し算作らないと気付かない違いを気付いて教えるのに役立ててる。
(+1/-1の代わりにsucc/pred関数の適用で考えた方が分かり易いかも)
585デフォルトの名無しさん
2024/11/02(土) 20:16:43.59ID:pIz290+w >>583
そうなんだ。
そういうライブラリ頼みっぽい事なら、MathmacticaとかPythonのが良さそうなのにね。
金融商品だったら統計に強いRだってあるし。
なぜわざわざOCamlだったのやら…。
そうなんだ。
そういうライブラリ頼みっぽい事なら、MathmacticaとかPythonのが良さそうなのにね。
金融商品だったら統計に強いRだってあるし。
なぜわざわざOCamlだったのやら…。
586デフォルトの名無しさん
2024/11/03(日) 11:40:35.68ID:kGU90lSm587デフォルトの名無しさん
2024/11/03(日) 17:33:41.03ID:4RaSizfZ その手のはかなり昔からの話だしその頃pythonはそんな一般的ではない
588デフォルトの名無しさん
2024/11/03(日) 18:58:10.27ID:W/WQS3jI589デフォルトの名無しさん
2024/11/06(水) 18:53:34.69ID:s8sk505y semigroupoidsのAltからFunctor抜いたやつないのかな
catsのSemigroupK相当のやつ
catsのSemigroupK相当のやつ
590デフォルトの名無しさん
2024/11/07(木) 02:17:24.00ID:w1FRCcDr HackageもHaskellWikiもつながらねえ
攻撃でも受けたか
攻撃でも受けたか
591デフォルトの名無しさん
2024/11/07(木) 06:45:43.72ID:NVSipRlq 数か月前もHoogle繋がらなかったしね…。
592デフォルトの名無しさん
2024/11/09(土) 18:32:16.19ID:r4DlAvJp mylist.py TotalSeconds : 6.1246778
1:def mylist(n, m):
2: a = 1
3: outer = []
4: for _ in range(0, n):
5: inner = []
6: for _ in range(0, m):
7: inner.append(a)
8: a += 1
9: outer.append(inner)
10: return outer
11:
12:print(mylist(6000, 8000)[-1][-1])
上と同じ動きのコードを書いたけど、
アルゴリズムとしてはPythonと同じmylist.hsのコードが良いはずなのに、
どっちも最適化するとmylist2.hsのが良好。
(ファイル名の横の秒数は実行時間)
mylist.hs TotalSeconds : 4.107899
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.f $ [1..]
4: where f ns = xs:f ys
5: where (xs, ys) = splitAt m ns
mylist2.hs TotalSeconds : 2.3916408
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.iterate f $ [1..m]
4: where f = map (+m)
1:def mylist(n, m):
2: a = 1
3: outer = []
4: for _ in range(0, n):
5: inner = []
6: for _ in range(0, m):
7: inner.append(a)
8: a += 1
9: outer.append(inner)
10: return outer
11:
12:print(mylist(6000, 8000)[-1][-1])
上と同じ動きのコードを書いたけど、
アルゴリズムとしてはPythonと同じmylist.hsのコードが良いはずなのに、
どっちも最適化するとmylist2.hsのが良好。
(ファイル名の横の秒数は実行時間)
mylist.hs TotalSeconds : 4.107899
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.f $ [1..]
4: where f ns = xs:f ys
5: where (xs, ys) = splitAt m ns
mylist2.hs TotalSeconds : 2.3916408
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.iterate f $ [1..m]
4: where f = map (+m)
593デフォルトの名無しさん
2024/11/09(土) 18:32:43.47ID:r4DlAvJp mylist2.hsのアルゴリズムは
f = map (+3)とすれば
[1,2,3]
[4,5,6] -- f [1,2,3] = [1 + 3, 2 + 3, 3 + 3] = [4,5,6]
[7,8,9] -- f (f [1,2,3]) = f [1 + 3, 2 + 3, 3 + 3] = [4 + 3, 5 + 3, 6 + 3] = [7,8,9]
と、行数が増えるごとに関数の適用回数が増えるので本来なら遅いはずですが、
考えるに直前の結果をキャッシュする様な最適化が施された模様。(-O3)
(そうすると、mylist.hsのsplitAtの方がボトルネックになる?)
最適化なしでのコンパイルはしてないので、
もしかしたらiterateの中身自身がキャッシュするように改良されたのかも。
f = map (+3)とすれば
[1,2,3]
[4,5,6] -- f [1,2,3] = [1 + 3, 2 + 3, 3 + 3] = [4,5,6]
[7,8,9] -- f (f [1,2,3]) = f [1 + 3, 2 + 3, 3 + 3] = [4 + 3, 5 + 3, 6 + 3] = [7,8,9]
と、行数が増えるごとに関数の適用回数が増えるので本来なら遅いはずですが、
考えるに直前の結果をキャッシュする様な最適化が施された模様。(-O3)
(そうすると、mylist.hsのsplitAtの方がボトルネックになる?)
最適化なしでのコンパイルはしてないので、
もしかしたらiterateの中身自身がキャッシュするように改良されたのかも。
594デフォルトの名無しさん
2024/11/10(日) 16:05:22.18ID:AfmJKCJ3 これ数学的にどういうことなのか
かいつまんで教えてくらまいか
watch?v=dYj0rPQeRkA
かいつまんで教えてくらまいか
watch?v=dYj0rPQeRkA
595デフォルトの名無しさん
2024/11/16(土) 10:08:07.70ID:9CYVpzbn Category Theory Using Haskell
An Introduction with Moggi and Yoneda
Shuichi Yukita
という書籍が来月出るんですって?
An Introduction with Moggi and Yoneda
Shuichi Yukita
という書籍が来月出るんですって?
596デフォルトの名無しさん
2024/11/16(土) 14:32:48.68ID:Avgm411i597596
2024/11/16(土) 14:36:30.07ID:Avgm411i 円記号がバックスラッシュになっていたので訂正
¥36,125
フォントによるわけだが
¥36,125
フォントによるわけだが
598デフォルトの名無しさん
2024/11/16(土) 15:13:06.50ID:ZnREBqGy 買って損するだけの高額本の予感
599デフォルトの名無しさん
2024/11/16(土) 15:27:44.60ID:x85mVkLf なんだ雪田の本じゃねぇか
プラスアルファはあるかも知れんが
基本雪田の「圏論入門 Haskellで計算する具体例から」と大差無いと思うぞ
プラスアルファはあるかも知れんが
基本雪田の「圏論入門 Haskellで計算する具体例から」と大差無いと思うぞ
600デフォルトの名無しさん
2024/11/16(土) 20:50:43.88ID:ZUJ+jDQV 結局Moggiのアイディアがなんなのか書いてなかったから、洋書でも同じでしょ。
601デフォルトの名無しさん
2024/11/16(土) 21:01:44.68ID:UsNa54E4 すでに書かれてるのがwikipediaにあるじゃん
https://ja.m.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%AA%E5%9C%8F
https://ja.m.wikipedia.org/wiki/%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%B9%E3%83%AA%E5%9C%8F
602デフォルトの名無しさん
2024/11/16(土) 21:18:48.47ID:ZUJ+jDQV wikiのは肝心のvalueとcomputationについてちゃんと書いてない。
computationの訳を「計算された値」とするのは微妙。
computationの訳を「計算された値」とするのは微妙。
603デフォルトの名無しさん
2024/11/16(土) 21:28:16.06ID:ZUJ+jDQV 『圏論入門』の方にはvalueもcomputationも書いてなかったと思うから言わずもがな。
604デフォルトの名無しさん
2024/11/16(土) 21:43:11.16ID:HNcchqjT 出たら人柱になって買って読んで下さい
605デフォルトの名無しさん
2024/11/16(土) 22:29:43.38ID:MlIU4R6X 多分加筆してると思うよ
日本の出版社はなぜかページ数制限があることが多いんだけど
海外にそれはないし
日本の出版社はなぜかページ数制限があることが多いんだけど
海外にそれはないし
606デフォルトの名無しさん
2024/11/16(土) 22:41:34.37ID:ZUJ+jDQV 加筆してvalueとcomputationの説き起こしから始めて本当にMoggiのアイディア書くかなぁ?
米田の補題が工学応用できるとかいう主張と衝突する気がするんだけれど。
米田の補題が工学応用できるとかいう主張と衝突する気がするんだけれど。
607デフォルトの名無しさん
2024/11/17(日) 08:11:12.88ID:RK7ri1yG レポよろ
608デフォルトの名無しさん
2024/11/17(日) 09:07:13.97ID:zx90fdBd ぷりぷりです
609デフォルトの名無しさん
2024/11/17(日) 14:35:29.88ID:895B27h0 4万近く出してわざわざレポだけする奴なんているの?
圏論入門と同じでそれらしいキーワードだけ出して終わりの可能性高いのに。
圏論入門と同じでそれらしいキーワードだけ出して終わりの可能性高いのに。
610デフォルトの名無しさん
2024/11/17(日) 19:34:30.56ID:A63wUj4E まぁそもそもHaskellで圏論持ち出す必要ないしな
生産性上がらないよ
生産性上がらないよ
611デフォルトの名無しさん
2024/11/17(日) 19:42:07.02ID:bAlb8WtH Haskell、コーダー界隈で圏論勉強会が流行していた時期、あれは何だったのか?
612デフォルトの名無しさん
2024/11/17(日) 20:00:10.23ID:895B27h0 圏がグラフの拡張みたいな概念だったから、グラフ理論みたいに有用なプログラミングにつかえるアルゴリズムがあるんじゃないかってことでやってたように見えた。
モナドも説明したかったようにみえたけど、結局圏論の勉強を踏まえた説明はでてこなかった。
モナドも説明したかったようにみえたけど、結局圏論の勉強を踏まえた説明はでてこなかった。
613デフォルトの名無しさん
2024/11/17(日) 21:17:15.64ID:U7PWp5lE614デフォルトの名無しさん
2024/11/20(水) 04:56:53.37ID:vcDCbnyw プログラムは合成できないといけないって当然のことを、いちいち圏である必要があるとか言い換えるオレ天才だわー
615デフォルトの名無しさん
2024/11/20(水) 18:55:46.60ID:QVKMRnqI616デフォルトの名無しさん
2024/11/21(木) 00:16:43.88ID:r2/mXbdf 集合論と圏論の抽象度がもし同レベルならたしかに圏である必要はないな
必要ない情報は捨象されるべきだと言われれば何も反論できない
だから抽象化マウントは強いんだ
必要ない情報は捨象されるべきだと言われれば何も反論できない
だから抽象化マウントは強いんだ
617デフォルトの名無しさん
2024/11/21(木) 01:45:46.56ID:bAf4oZLa 抽象化すればプログラムしにくいと思うけど
618デフォルトの名無しさん
2024/11/21(木) 19:02:52.56ID:fTdZV0pc プログラムが圏になるためとかいうクソしょうもない理由がモナド導入の理由って本当か?
圏論っていうか圏じゃん。モノイド構造も米田の補題もなにも出てこないんだが
圏論っていうか圏じゃん。モノイド構造も米田の補題もなにも出てこないんだが
619デフォルトの名無しさん
2024/11/21(木) 21:57:07.56ID:r2/mXbdf 型構築子を導入すれば関手もモナドも勝手についてくる
型を必要とするすべての言語で同じことが言える
これも抽象化
型を必要とするすべての言語で同じことが言える
これも抽象化
620デフォルトの名無しさん
2024/11/28(木) 10:04:33.91ID:p2Q1UON9 haskellでスクレイピングがやりたいんだが
arch linuxのリポにはscalpelがない
別言語でやったほうがいいかな?
arch linuxのリポにはscalpelがない
別言語でやったほうがいいかな?
621デフォルトの名無しさん
2024/12/04(水) 21:11:42.90ID:D3PBVzJs ディストリで全部パッケージ化してくれてるとは思えん
stackかcabal入れて自分で管理するんじゃね?
ローカルに1GBくらいのライブラリ入るし重複しないようにしないといかんが
もちろんseleniumとか使うにしてもpythonとかrubyのほうが楽やろ
stackかcabal入れて自分で管理するんじゃね?
ローカルに1GBくらいのライブラリ入るし重複しないようにしないといかんが
もちろんseleniumとか使うにしてもpythonとかrubyのほうが楽やろ
622デフォルトの名無しさん
2024/12/08(日) 23:12:57.17ID:G2o8fSXB おおむね10^-300前後(-400乗は無理だった)精度の任意精度少数。
定義済みの中ではPico(10^-12)までは定義されてる。
下の定義のE300/10^300/F300を書き換えれば任意精度の浮動小数型が作れる。
(F300がPicoとかNanoとかの型)
ただし、pi/sin/sqrtなどの倍精度/単精度の浮動小数型用関数/定数が使えなくなるので四則演算を駆使して自作する必要がある。
import Data.Fixed
data E300
instance HasResolution E300 where resolution _ = 10^300
type F300 = Fixed E300
定義済みの中ではPico(10^-12)までは定義されてる。
下の定義のE300/10^300/F300を書き換えれば任意精度の浮動小数型が作れる。
(F300がPicoとかNanoとかの型)
ただし、pi/sin/sqrtなどの倍精度/単精度の浮動小数型用関数/定数が使えなくなるので四則演算を駆使して自作する必要がある。
import Data.Fixed
data E300
instance HasResolution E300 where resolution _ = 10^300
type F300 = Fixed E300
623デフォルトの名無しさん
2024/12/19(木) 15:03:02.64ID:NXRHTsH0 add (x,y) (a,b) = (x+a,y+b)
これをaddを定義せずにarrowで簡単にかく方法はありますか
これをaddを定義せずにarrowで簡単にかく方法はありますか
624デフォルトの名無しさん
2024/12/19(木) 16:15:15.91ID:hCGKCs/t arrowてなんすか
625デフォルトの名無しさん
2024/12/19(木) 19:27:09.72ID:gIJYmlNm 富士通のスマホ
626デフォルトの名無しさん
2024/12/20(金) 01:32:43.30ID:/9ZUXmih スマホでHaskellを簡単に書く方法はないかな
627デフォルトの名無しさん
2024/12/20(金) 02:01:04.72ID:I9azuXSK >>626
今はキミの言うところの「簡単」ではない環境で書いてるってこと?
今はキミの言うところの「簡単」ではない環境で書いてるってこと?
628デフォルトの名無しさん
2024/12/20(金) 02:04:07.41ID:/9ZUXmih629デフォルトの名無しさん
2024/12/20(金) 15:54:59.07ID:IOWVZ3it スマホでHaskell書く必要ある?
ないよね
ないよね
630デフォルトの名無しさん
2024/12/20(金) 22:08:57.75ID:uE9QxZQG 初学者のため、言葉の定義があいまいな部分はご容赦ください
IOモナドの純粋性についてですが(すでに言葉があやしい)、
実際に副作用が起こるのは、mainに束縛され実行されたり、ghciプロンプトからアクションを投入したときで
アクションを生成するまでは同じ入力に対してはつねに同一のアクションを出力するという意味で純粋であるという理解でよいでしょうか(まだ実行前なので、副作用は生じていない)
アクションを生成するまでが純粋
ただ、このときの純粋性の有り難みがさっぱり分からず…
純粋な関数が遅延評価などに有効なことや、副作用のある処理が >>= などで順序を拘束しなければならないことは分かるのですが
IOモナドの純粋性についてですが(すでに言葉があやしい)、
実際に副作用が起こるのは、mainに束縛され実行されたり、ghciプロンプトからアクションを投入したときで
アクションを生成するまでは同じ入力に対してはつねに同一のアクションを出力するという意味で純粋であるという理解でよいでしょうか(まだ実行前なので、副作用は生じていない)
アクションを生成するまでが純粋
ただ、このときの純粋性の有り難みがさっぱり分からず…
純粋な関数が遅延評価などに有効なことや、副作用のある処理が >>= などで順序を拘束しなければならないことは分かるのですが
632デフォルトの名無しさん
2025/01/09(木) 20:13:21.93ID:xwwTGWUu 評価が全部終わった後じゃないと参照透明性が保証されない。
633デフォルトの名無しさん
2025/01/09(木) 20:18:47.77ID:xwwTGWUu 規制あったはずなんだけどなんか書き込めた。
アクションの生成が完了(コンパイルの終了)。この時点ではみんな純粋。
その後に、アクションの実行(プログラムの実行)が起こって入出力が出る。
アクションの生成時点まですべての関数が純粋関数だということは参照透明性が保証されるということで、ありがたみはその一点にあると思うが。
アクションの生成が完了(コンパイルの終了)。この時点ではみんな純粋。
その後に、アクションの実行(プログラムの実行)が起こって入出力が出る。
アクションの生成時点まですべての関数が純粋関数だということは参照透明性が保証されるということで、ありがたみはその一点にあると思うが。
634デフォルトの名無しさん
2025/01/09(木) 21:49:19.20ID:31eIYKLT 異教徒は汚染物として分離隔離する思想
636デフォルトの名無しさん
2025/01/09(木) 23:09:19.47ID:2G6IUNoe >>634
おパンツ分解されたオペラッドのおパンツの中で脱糞してもズボンの裾のお股のどっち側からウンコが転げ出てくるのかわかんないだけかと思ってた。
おパンツ分解されたオペラッドのおパンツの中で脱糞してもズボンの裾のお股のどっち側からウンコが転げ出てくるのかわかんないだけかと思ってた。
637デフォルトの名無しさん
2025/01/09(木) 23:34:59.91ID:xwwTGWUu >>635
>でもこれって、Cだろうがアセンブラだろうが、(厳密には違うかもしれませんが)同じソースコードをコンパイル(アセンブリ)すれば同じオブジェクトファイルが生成されるのと何が違うのだろうかと
だから参照透明性の保証だって。オブジェクトファイルとしては状態変化とかしているけれど、元のHaskellコードとしては参照透明性は保たれている、そこがすごいということなんだし。
逆に普通のオブジェクトファイルと全く違うなんてことありうると思う?同じコンピュータ上で動くんだからオブジェクトファイルとしては変わらんだろ。
>でもこれって、Cだろうがアセンブラだろうが、(厳密には違うかもしれませんが)同じソースコードをコンパイル(アセンブリ)すれば同じオブジェクトファイルが生成されるのと何が違うのだろうかと
だから参照透明性の保証だって。オブジェクトファイルとしては状態変化とかしているけれど、元のHaskellコードとしては参照透明性は保たれている、そこがすごいということなんだし。
逆に普通のオブジェクトファイルと全く違うなんてことありうると思う?同じコンピュータ上で動くんだからオブジェクトファイルとしては変わらんだろ。
>>637
レスをありがとうございます
参照透過性の保証、ですね
アクションを実行し、副作用が起こる前なので当然だ、という解釈は誤っているでしょうか
まだ本の上の字面を追って学んでいるだけで圧倒的にコーティング量が足りない状態なので、これから経験を積むうちにいつかスッと腑に落ちるときがくるのかもしれません
レスをありがとうございます
参照透過性の保証、ですね
アクションを実行し、副作用が起こる前なので当然だ、という解釈は誤っているでしょうか
まだ本の上の字面を追って学んでいるだけで圧倒的にコーティング量が足りない状態なので、これから経験を積むうちにいつかスッと腑に落ちるときがくるのかもしれません
639デフォルトの名無しさん
2025/01/10(金) 10:01:16.98ID:xLB3XHZu 必要呼び評価戦略を採用するための前提として、すべての式の参照透過性が要求されるというだけでは
640デフォルトの名無しさん
2025/01/10(金) 18:54:00.90ID:X+hiLHcK >>638
>アクションを実行し、副作用が起こる前なので当然だ、という解釈は誤っているでしょうか
?なんか混乱しているんじゃないか。
アクションの生成時点でのHaskellコードの参照透明性と、オブジェクトコード実行の際の参照の処理は別物だぞ。
>アクションを実行し、副作用が起こる前なので当然だ、という解釈は誤っているでしょうか
?なんか混乱しているんじゃないか。
アクションの生成時点でのHaskellコードの参照透明性と、オブジェクトコード実行の際の参照の処理は別物だぞ。
641デフォルトの名無しさん
2025/01/10(金) 18:59:59.95ID:X+hiLHcK 補足:
Haskellコンパイルは少なくとも次の二つの段階を持つ
1.アクションの生成(入出力指示書の生成、Haskellコードの字面のコンパイル)
2.アクションの実行
1.のアクションの生成時に参照透明性がHaskellコードとして保証されている。
アクションの生成で必要な参照行為は全て終わっているので、2.では入出力だろうが破壊的操作だろうがやっても文句を言われない。
IOの機構がすごいのは1.アクションの生成計算で参照透明性が保証されているというところがうれしいところ、だという話。
Haskellコンパイルは少なくとも次の二つの段階を持つ
1.アクションの生成(入出力指示書の生成、Haskellコードの字面のコンパイル)
2.アクションの実行
1.のアクションの生成時に参照透明性がHaskellコードとして保証されている。
アクションの生成で必要な参照行為は全て終わっているので、2.では入出力だろうが破壊的操作だろうがやっても文句を言われない。
IOの機構がすごいのは1.アクションの生成計算で参照透明性が保証されているというところがうれしいところ、だという話。
642デフォルトの名無しさん
2025/01/10(金) 19:16:07.13ID:NIbIyPdh 一度死んだら復活は有り得んので注意な
>>640-641
レスをありがとうございます
そうですね
表現がいけませんでしたが、そのように理解しています
あとひとつ伺いたいのが(アドバイスいただいたことがまだちゃんと理解できたわけではないのでアレですが)、
参照透明性が担保されているとは、(1.アクションを生成する時点までは)副作用がある処理は書くことができない、ということでしょうか
レスをありがとうございます
そうですね
表現がいけませんでしたが、そのように理解しています
あとひとつ伺いたいのが(アドバイスいただいたことがまだちゃんと理解できたわけではないのでアレですが)、
参照透明性が担保されているとは、(1.アクションを生成する時点までは)副作用がある処理は書くことができない、ということでしょうか
645デフォルトの名無しさん
2025/01/10(金) 20:01:13.00ID:X+hiLHcK >>643-644
そのように理解しています。って本当に理解してるか?
アクションの生成において生成しているのは入出力の指示書みたいなもので入出力自体はない。
こういう入力があったらこういう計算方法でこういう出力をするみたいな手順を生成しているだけ。
なんで参照透明性が担保されているというところでそんな引っかかるんだ?
そのように理解しています。って本当に理解してるか?
アクションの生成において生成しているのは入出力の指示書みたいなもので入出力自体はない。
こういう入力があったらこういう計算方法でこういう出力をするみたいな手順を生成しているだけ。
なんで参照透明性が担保されているというところでそんな引っかかるんだ?
>>643 で確認したかったことは次のようなことでした
アクションを生成する段までは副作用なく、同一のプログラムを入力とすれば、かならず同一のアクションが出力されるか
ということでした
それはそうであるように思います
アクションを生成する段までは副作用なく、同一のプログラムを入力とすれば、かならず同一のアクションが出力されるか
ということでした
それはそうであるように思います
647デフォルトの名無しさん
2025/01/10(金) 20:42:16.47ID:X+hiLHcK 同一のプログラムを入力とすればってどういう意味?
前も言ったようにアクションの生成とアクションの実行は別フェーズ。同一のアクションが出力される、というのはどっちのフェーズでのことを言ってんの?
前も言ったようにアクションの生成とアクションの実行は別フェーズ。同一のアクションが出力される、というのはどっちのフェーズでのことを言ってんの?
649デフォルトの名無しさん
2025/01/10(金) 21:34:10.26ID:X+hiLHcK なんか理解しているのかすごい怪しいなぁ。
一応回答しておくと、アクションの生成のフェーズなら参照透明性を保証された純粋関数の計算でしかないから
main文が同じなら当然同じアクションが生成される。
同じプログラムなら生成されるものも同じという意味で。
理解してたらこんな話出てこないと思うんだけど。
一応回答しておくと、アクションの生成のフェーズなら参照透明性を保証された純粋関数の計算でしかないから
main文が同じなら当然同じアクションが生成される。
同じプログラムなら生成されるものも同じという意味で。
理解してたらこんな話出てこないと思うんだけど。
651デフォルトの名無しさん
2025/01/13(月) 17:46:46.07ID:uTEEqnKb あけなしておめでとうございます
去年は多様性がようやく否定され始めた年ですが、
今年はhaskellの純粋主義のやうに分類・隔離・排除躍進の年となるようがんばりましょう
去年は多様性がようやく否定され始めた年ですが、
今年はhaskellの純粋主義のやうに分類・隔離・排除躍進の年となるようがんばりましょう
652デフォルトの名無しさん
2025/01/15(水) 00:44:26.65ID:O9bWSOqU マクロな現象には個々人のばらつきを否定する力はない
逆に個人は10回連続でグーを出してみてもたとえば「正規分布に従う」とかなんとかいう法則を反証できない
ミクロとマクロを隔離したのはただの統計学であって純粋でも主義でもない
逆に個人は10回連続でグーを出してみてもたとえば「正規分布に従う」とかなんとかいう法則を反証できない
ミクロとマクロを隔離したのはただの統計学であって純粋でも主義でもない
653デフォルトの名無しさん
2025/01/15(水) 05:29:17.90ID:QElBeHY8 誰もいまミクロ・マクロの話なんてしてないぞ
654デフォルトの名無しさん
2025/01/21(火) 22:22:46.92ID:QQz8h7YM 雪田の英語版買って読んだ勇者はおらんか?
655デフォルトの名無しさん
2025/01/22(水) 01:14:29.67ID:SDQT/604 3万も出してよもうとは思わない。
目次読むとKleisli tripleの節はあるのにKleisli categoryの節がなかったり、なぜかその後にMoggi's theoryが出てきたりと
少なくとも構成があんまりいい感じはしない。
目次読むとKleisli tripleの節はあるのにKleisli categoryの節がなかったり、なぜかその後にMoggi's theoryが出てきたりと
少なくとも構成があんまりいい感じはしない。
656デフォルトの名無しさん
2025/01/22(水) 03:57:21.12ID:ydcqGqD9 まぁ圏論はHaskellやるうえで無駄だしな
657デフォルトの名無しさん
2025/01/23(木) 21:00:49.82ID:j8NlocC3 しかもHaskell自体やるだけ無駄だしな
658デフォルトの名無しさん
2025/02/13(木) 07:10:20.44ID:NHs8kkcw wikiでghc見たら、中の人MSリサーチにいるのな。
最近C#並みに速くなったと思ったら、そういう事か。
納得。
最近C#並みに速くなったと思ったら、そういう事か。
納得。
659デフォルトの名無しさん
2025/02/13(木) 13:53:19.78ID:LmH89MFs 暗記系の問題が嫌われるのは答えを隠す意味がないからだが
逆に陰謀論が大人気なのは、隠蔽する動機があるからかもしれない
逆に陰謀論が大人気なのは、隠蔽する動機があるからかもしれない
660デフォルトの名無しさん
2025/02/13(木) 19:59:58.08ID:8vmF21CT661デフォルトの名無しさん
2025/02/13(木) 21:57:13.74ID:FvaixK+o わざとだろ。
数板に延々スレ違を書き込む基地外がいるが多分そいつと同一。
数板に延々スレ違を書き込む基地外がいるが多分そいつと同一。
662デフォルトの名無しさん
2025/02/13(木) 22:11:56.50ID:LxUFvhMj ワードサラダくん数学板にもいるんか
まあいそうな板だな
まあいそうな板だな
663デフォルトの名無しさん
2025/02/13(木) 23:39:39.86ID:LmH89MFs 有意味な事実と有意味なデマを隔離するのは難しいらしい
だが、真でも偽でもないナンセンスはなぜか瞬時に判断できる
だが、真でも偽でもないナンセンスはなぜか瞬時に判断できる
664デフォルトの名無しさん
2025/03/19(水) 11:03:50.18ID:JUfTLTVZ IntSetのsizeがO(1)じゃなくO(n)なのはなぜですか、O(1)で実装できそうなもんですが
665デフォルトの名無しさん
2025/03/19(水) 19:45:13.59ID:4qyoYSYb unionとかで重複要素数えるのが面倒だから必要になるまで数えない
666デフォルトの名無しさん
2025/03/19(水) 20:51:01.02ID:S6mpqhEQ 私は最強ーーすき
667デフォルトの名無しさん
2025/03/19(水) 20:52:16.86ID:S6mpqhEQ 誤爆スマソ。懐メロチャンネルと間違えた
レスを投稿する
ニュース
- 大阪・関西万博の総入場者数が50万人を突破(内、関係者約10万人) 2005年開催の愛・地球博より早いペース ★2 [少考さん★]
- トランプ氏、パウエルFRB議長の解任を検討 早期利下げめぐり対立 [蚤の市★]
- 【日本語】「親子丼」を「おやこどん」と読む人は20代と30代に多い…年代・性別・地域でも差が出る身近な食べ物の呼び方 ★2 [おっさん友の会★]
- 【映画】劇場版『名探偵コナン』記録的大ヒットスタート! 公開1日で10.5億円突破、すでに8回鑑賞したリピーターも [冬月記者★]
- 【アニメ】『アン・シャーリー』での“原作との違い”に『赤毛のアン』翻訳家が困惑 物語の根幹に関わる色の“改変”も [ネギうどん★]
- 【芸能】紗栄子 17歳の息子が新人モデル・道休蓮と公表 「七光りって言われちゃうだろうし…」 父はダルビッシュ有 [冬月記者★]
- 【朗報】万博、入場者数50万人(関係者10万人)突破🎉 [834922174]
- 次スレたてんなよ?😡マヂで🏡
- バブル世代「大阪万博とか最近の日本って何でも『金金金』になって最悪。90-2000年代は何でも安くてこんなことなかった」819万いいね [257926174]
- 日本のトランプ関税対応に全世界驚愕「え…交渉担当者がMAGA帽子かぶってヘラヘラしてんだけど…」 [667744927]
- 【悲報】大阪万博「フードコートの有料席は大好評、貧乏人が喚いてるだけw」 [616817505]
- 同僚「生理のときは体あっためた方がいいよ」子宮「(キュン♡)」 [281145569]