関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part31
https://mevius.5ch.net/test/read.cgi/tech/1506447188/
探検
関数型プログラミング言語Haskell Part32
■ このスレッドは過去ログ倉庫に格納されています
2019/01/29(火) 09:05:47.90ID:gJP/u7IJ
562デフォルトの名無しさん
2019/10/17(木) 10:16:38.68ID:kLoaz8mV モナドはただのデザインパターンの一つだろ
563デフォルトの名無しさん
2019/10/17(木) 10:44:35.23ID:n/9LzeKG564デフォルトの名無しさん
2019/10/17(木) 10:44:48.97ID:UnH0fUML モナドほどの抽象化しただけで画期的じゃん
イテレータとか用意してデータ構造によらないコンテナへの共通インタフェースとさらにそれへの特別なシンタックスシュガー用意した言語ぐらいならあった
モナドなんか用意してdo記法なんてシンタックスシュガー用意してプログラミング言語における手続き的処理やその他諸々を抽象化した
イテレータとか用意してデータ構造によらないコンテナへの共通インタフェースとさらにそれへの特別なシンタックスシュガー用意した言語ぐらいならあった
モナドなんか用意してdo記法なんてシンタックスシュガー用意してプログラミング言語における手続き的処理やその他諸々を抽象化した
565デフォルトの名無しさん
2019/10/17(木) 10:57:50.46ID:8XbgiZIP 抽象化できてるか?
手続き型と同じっぽく見えるけど、いざ活用しようとすると同じようには使えなくて意味不明な型エラーで詰まる
結局のところモナドの仕組み理解できてないと使いこなせない
これは抽象化できてないってことでしょ
手続き型と同じっぽく見えるけど、いざ活用しようとすると同じようには使えなくて意味不明な型エラーで詰まる
結局のところモナドの仕組み理解できてないと使いこなせない
これは抽象化できてないってことでしょ
566デフォルトの名無しさん
2019/10/17(木) 11:46:58.33ID:UnH0fUML そりゃ任意の手続き型言語を再現できるわけではないから完全な抽象化ではないけど
手続き型的な処理とか、失敗する可能性のある処理とか、非決定的処理だとか、そう言った諸々をまとめてモナドとして一般化してる
そのおかげでそれら全てで共通にdo記法やモナド向けの関数といったものが使えて、各種毎に個別に関数を用意したり覚えたりする必要が減る
自作のDSLなどを構築するときにも
モナドインタフェースを実装するだけでdo記法やモナド向け関数群を使えるようになる
他言語でDSL構築は結構大変だし、オレオレDSLなんてどういう仕様かわかりにくいけど、haskellなら型から検索したり型を見たりすることでどういうアクションがあってどうやって使うのかがわかる
手続き型的な処理とか、失敗する可能性のある処理とか、非決定的処理だとか、そう言った諸々をまとめてモナドとして一般化してる
そのおかげでそれら全てで共通にdo記法やモナド向けの関数といったものが使えて、各種毎に個別に関数を用意したり覚えたりする必要が減る
自作のDSLなどを構築するときにも
モナドインタフェースを実装するだけでdo記法やモナド向け関数群を使えるようになる
他言語でDSL構築は結構大変だし、オレオレDSLなんてどういう仕様かわかりにくいけど、haskellなら型から検索したり型を見たりすることでどういうアクションがあってどうやって使うのかがわかる
567デフォルトの名無しさん
2019/10/17(木) 11:49:22.03ID:fFU5Cjed これがC++だったらJavaScript環境を作ってC++の仕組みを隠蔽するかもな
Haskellでも同じことをする自由はある
Haskellでも同じことをする自由はある
568デフォルトの名無しさん
2019/10/17(木) 21:34:43.47ID:AvAuJv6u 関数脳になるとどんな利点があるのかな?
手続記述は使い回ししにくい?
参照透過性が確保されていて型の情報があれば
算法の記法が手続き的か定義的かを問わず
どちらでもいいような気もするが
手続記述は使い回ししにくい?
参照透過性が確保されていて型の情報があれば
算法の記法が手続き的か定義的かを問わず
どちらでもいいような気もするが
569デフォルトの名無しさん
2019/10/18(金) 00:47:49.97ID:Jux/affY570デフォルトの名無しさん
2019/10/18(金) 06:44:38.21ID:lM5JoyFV >>562
絶対違う
絶対違う
571デフォルトの名無しさん
2019/10/18(金) 09:49:47.43ID:F+Okgjq/ >>569
全然違うんだよなぁ…
全然違うんだよなぁ…
572デフォルトの名無しさん
2019/10/18(金) 12:21:22.11ID:cHgwfEPK コンストラクターがオーバーロードできないから別の列挙型に同じタグ名がつけれないんだけど
どうしたらいい?
どうしたらいい?
573デフォルトの名無しさん
2019/10/18(金) 12:40:18.58ID:B/ouUg1P574デフォルトの名無しさん
2019/10/18(金) 12:41:41.68ID:B/ouUg1P >>572
自分だったら根本的な構造を見直すかな
自分だったら根本的な構造を見直すかな
575デフォルトの名無しさん
2019/10/18(金) 17:04:05.16ID:lM5JoyFV >>574
kwsk
kwsk
576デフォルトの名無しさん
2019/10/18(金) 20:30:34.81ID:O9SciFl2 >>572
DuplicateRecordFields 拡張を使うとできるようになるっぽいよ。
http://lotz84.github.io/haskell/extensible-record.html
DuplicateRecordFields 拡張を使うとできるようになるっぽいよ。
http://lotz84.github.io/haskell/extensible-record.html
577デフォルトの名無しさん
2019/10/18(金) 20:44:14.39ID:lM5JoyFV >>576
俺も一瞬それ思ったけど同名データコンストラクタもできたっけ?
俺も一瞬それ思ったけど同名データコンストラクタもできたっけ?
578デフォルトの名無しさん
2019/10/18(金) 21:22:19.66ID:O9SciFl2 >>577
コンストラクタの方か。見間違えてた
コンストラクタの方か。見間違えてた
579デフォルトの名無しさん
2019/10/18(金) 22:18:25.57ID:O9SciFl2 data 宣言を別モジュールに分けて
両方が必要なら import ... as ... で別名をつけるって方法はどう?
両方が必要なら import ... as ... で別名をつけるって方法はどう?
580デフォルトの名無しさん
2019/10/18(金) 22:56:52.03ID:liCy40EB モナドを導入することで副作用のない
「副作用のチェーンをつくって渡す。」
ちなみに実行は副作用させるというバカみたいなレトリックを実行してるだけ。
バカはそういうものをありがたがるんだよ。
そしてそういうものをありがたがるというのはバカみたいに本質なんだな。
「副作用のチェーンをつくって渡す。」
ちなみに実行は副作用させるというバカみたいなレトリックを実行してるだけ。
バカはそういうものをありがたがるんだよ。
そしてそういうものをありがたがるというのはバカみたいに本質なんだな。
581デフォルトの名無しさん
2019/10/18(金) 23:39:51.57ID:CSj9zhCF モナドのごとく回りくどく分かりにくい文だな
582デフォルトの名無しさん
2019/10/19(土) 00:07:09.37ID:0X24TT// >>575
Haskellは個人の趣味・自己啓発の道具の範疇なので
参考にならないでしょうが…
名前がかぶるのはどこか機能がかぶってたりするかなと
型の使い方を見直したり組み合わせる関数を見直したり
所属するモジュールを移動したりとか。
どうしても名前がかぶるってときは英語名や日本語名
ときには中国語とかも借用する(ただし英字を使う
ローマ字やピンイン表記)か密接に関係する事柄の
接頭辞をつけてる。
Haskellは個人の趣味・自己啓発の道具の範疇なので
参考にならないでしょうが…
名前がかぶるのはどこか機能がかぶってたりするかなと
型の使い方を見直したり組み合わせる関数を見直したり
所属するモジュールを移動したりとか。
どうしても名前がかぶるってときは英語名や日本語名
ときには中国語とかも借用する(ただし英字を使う
ローマ字やピンイン表記)か密接に関係する事柄の
接頭辞をつけてる。
583デフォルトの名無しさん
2019/10/19(土) 00:15:25.34ID:0X24TT// >>580
モナドで副作用・副作用もどきを扱えるけど
モナドの全てが副作用・副作用もどきを伴う
わけではないでしょ。
リストもMaybeもEitherもモナドとして扱う
定義はされているが別にそれをつなげても
副作用があるわけでなし。
モナドで副作用・副作用もどきを扱えるけど
モナドの全てが副作用・副作用もどきを伴う
わけではないでしょ。
リストもMaybeもEitherもモナドとして扱う
定義はされているが別にそれをつなげても
副作用があるわけでなし。
584デフォルトの名無しさん
2019/10/20(日) 21:44:47.02ID:5Lp8lBZ6 非決定計算やIOが同じモナドというククリで実現できるのが大変興味深いです
585デフォルトの名無しさん
2019/10/20(日) 23:54:14.30ID:Wg020iKs なぜそんなにお前らがモナドについてあーでもないこーでもないと話し合ってるのかがわからない
モナドなんていたってシンプルな考え方なのに
モナドなんて単純にどうやって関数を合成するかというルールにすぎない
より正確には、「モナディックな関数」を合成するルール
では、モナディックな関数とは?それは"装飾された値"を返す関数のこと。
どんな装飾が施されたかについては、文脈によって様々だが、たとえば…
・エラー -> 失敗を表すデータもとりうる値 MaybeとかEither Error
・非決定性 -> いくつもの値を同時に表す値 List, Array
・副作用 -> 副作用自体を表すデータ Effect, Aff
・状態を扱う -> 状態を表すデータとセットになった値 Reader , Writer, State
モナドなんていたってシンプルな考え方なのに
モナドなんて単純にどうやって関数を合成するかというルールにすぎない
より正確には、「モナディックな関数」を合成するルール
では、モナディックな関数とは?それは"装飾された値"を返す関数のこと。
どんな装飾が施されたかについては、文脈によって様々だが、たとえば…
・エラー -> 失敗を表すデータもとりうる値 MaybeとかEither Error
・非決定性 -> いくつもの値を同時に表す値 List, Array
・副作用 -> 副作用自体を表すデータ Effect, Aff
・状態を扱う -> 状態を表すデータとセットになった値 Reader , Writer, State
586デフォルトの名無しさん
2019/10/21(月) 00:25:00.67ID:4Py1bsIM シンプルな考え方合成ルールといいつつ
肝心のルールの中身を説明しないで
利点や応用分野のみ紹介する
典型的な日本人話法
モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?
肝心のルールの中身を説明しないで
利点や応用分野のみ紹介する
典型的な日本人話法
モナドは単なる自己関手の圏におけるモノイド対象だよ。何か問題でも?
587デフォルトの名無しさん
2019/10/21(月) 00:50:05.83ID:tyOGJJBt いやだから装飾のされ方は物によって様々だって言ってるじゃん
ルールの中身も当然装飾のされ方によって様々なんだから画一的に述べられないってわからないか?
一つ言えるのはbindとpureの定義を与えるってことくらいだが
あるいは同値な定義だが、関手であることを要請した上でjoinとreturnを与えるのでも構わない
数学者のモナドの定義を述べているお前ならこっちのほうが好みかもな
ルールの中身も当然装飾のされ方によって様々なんだから画一的に述べられないってわからないか?
一つ言えるのはbindとpureの定義を与えるってことくらいだが
あるいは同値な定義だが、関手であることを要請した上でjoinとreturnを与えるのでも構わない
数学者のモナドの定義を述べているお前ならこっちのほうが好みかもな
588デフォルトの名無しさん
2019/10/21(月) 11:02:55.47ID:Spzp+9MC 「自己関手の圏」の中身を説明しないからわけがわからない
関手の合成は積?
恒等関手は単位対象だが終対象ではない?
うっかり始対象になったりしたらそれ積じゃなくて和じゃないか
関手の合成は積?
恒等関手は単位対象だが終対象ではない?
うっかり始対象になったりしたらそれ積じゃなくて和じゃないか
589デフォルトの名無しさん
2019/10/21(月) 12:39:15.34ID:4Py1bsIM 中身は数学で明示されてるのでは
590デフォルトの名無しさん
2019/10/21(月) 14:07:32.87ID:Fq1X48Cm 自己関手の圏におけるモノイド対象としてモナドを理解することは、必ずしもプログラミングのためになるものではないから必須ではない。
それでもそれを理解したいのであれば、プログラミングの文脈で理解するのではなくて、ちゃんと圏論の文脈で理解した方がいい。
Bartosz MilewskiのCategory theory for programmerがわかりやすくておすすめ。
それでもそれを理解したいのであれば、プログラミングの文脈で理解するのではなくて、ちゃんと圏論の文脈で理解した方がいい。
Bartosz MilewskiのCategory theory for programmerがわかりやすくておすすめ。
591デフォルトの名無しさん
2019/10/21(月) 14:17:03.91ID:2JzHnDoh 【僕用メモ】
・bind と pure の定義を与える
・関手であることを要請した上で join と return の定義を与える
両者は同値である。
・bind と pure の定義を与える
・関手であることを要請した上で join と return の定義を与える
両者は同値である。
592デフォルトの名無しさん
2019/10/21(月) 14:44:27.76ID:VTam/Iyy だめな理系人間の特徴
初学者に対してひたすらwhatを説明
だいたいコミュ障を併発してる
初学者に対してひたすらwhatを説明
だいたいコミュ障を併発してる
593デフォルトの名無しさん
2019/10/21(月) 14:53:31.64ID:c9dhXgWB594デフォルトの名無しさん
2019/10/21(月) 15:19:59.07ID:ZzgPuxVR >>593
そうでもなくね? っていうか内容がHaskellに関係なかったw
そうでもなくね? っていうか内容がHaskellに関係なかったw
595デフォルトの名無しさん
2019/10/21(月) 15:38:45.76ID:E4DE6I01 お前らって圏論なにで勉強したの
英語の本読んだの?大学の授業とかで習ったの?
英語の本読んだの?大学の授業とかで習ったの?
596デフォルトの名無しさん
2019/10/21(月) 15:49:09.35ID:niRnsl0k 数学の本買って独学
597デフォルトの名無しさん
2019/10/21(月) 16:22:57.20ID:5+ah6i6T 知らん用語が出て来るから初学者で戸惑う人が多いだろうが
内容は小学生でも理解出来るレベル
内容は小学生でも理解出来るレベル
598デフォルトの名無しさん
2019/10/21(月) 16:52:11.20ID:D03iscrb Basic Category Theory, Tom Leinster
英語で読んだ
英語で読んだ
>>598
翻訳でもない和書ってありませんかね…
翻訳でもない和書ってありませんかね…
600デフォルトの名無しさん
2019/10/22(火) 02:26:17.25ID:Y6ckqEQv >>595
数学教室 πの焼き方と、プログラマーのための圏論。
ただ、読んだ後に意味を吟味して閃きが必要だった。
まず普通の関数とモナドな関数を同じと見做す考え。
IOモナドの入力は基本、文字列を受け取るので数文字列を受け取って、整数に変換後2倍する関数を作るとする。
getLine >>= \s -> return $ 2 * read s
これと同じ効果の普通の関数を作ってみる。
getLine’ s = 2 * read s
このgetLineとgetLine’をそれぞれ部分適用で見かけの変数を減らす形に変形。
getLine >>= return.(2*).read
getLine’ = (2*).read
この場合、2つの関数は型と引数からの入力か入力装置からの入力かしか違いがない。
関数の中身から見れば、いつ、どんな文字列が来るか分からない。同じ数文字列が来たら同じ結果を返すと言う意味では同じと見なせる。
数学教室 πの焼き方と、プログラマーのための圏論。
ただ、読んだ後に意味を吟味して閃きが必要だった。
まず普通の関数とモナドな関数を同じと見做す考え。
IOモナドの入力は基本、文字列を受け取るので数文字列を受け取って、整数に変換後2倍する関数を作るとする。
getLine >>= \s -> return $ 2 * read s
これと同じ効果の普通の関数を作ってみる。
getLine’ s = 2 * read s
このgetLineとgetLine’をそれぞれ部分適用で見かけの変数を減らす形に変形。
getLine >>= return.(2*).read
getLine’ = (2*).read
この場合、2つの関数は型と引数からの入力か入力装置からの入力かしか違いがない。
関数の中身から見れば、いつ、どんな文字列が来るか分からない。同じ数文字列が来たら同じ結果を返すと言う意味では同じと見なせる。
601デフォルトの名無しさん
2019/10/22(火) 02:26:29.61ID:Y6ckqEQv そして、圏論の主張は変数は引数無しの関数でも有ると言う事。
以下は関数である。
f x = 2 * x
しかし、部分適用されたカリー化関数は関数でもあり、変数でもある。
f = (2*) (関数でもあり、関数という値を返す変数でもある)
すなわち、x = 1のようなただの変数も、つねに1を返すxと言う引数の無い関数と見なせる。
x = 1 (1と言う値の入った変数であり、常に1を返す引数無しの関数でもある)
Haskellでは表現できないものの、さらに言えば数そのものも圏論では値であり、変数であり、関数である。
単純に書くと以下の通りだが、
1 = 1
ペアノの公理(ペアノ数)を使った方が概念的に分かりやすいかも知れない。
data Nat = Zero | Succ Nat
1 = Succ Zero
以下は関数である。
f x = 2 * x
しかし、部分適用されたカリー化関数は関数でもあり、変数でもある。
f = (2*) (関数でもあり、関数という値を返す変数でもある)
すなわち、x = 1のようなただの変数も、つねに1を返すxと言う引数の無い関数と見なせる。
x = 1 (1と言う値の入った変数であり、常に1を返す引数無しの関数でもある)
Haskellでは表現できないものの、さらに言えば数そのものも圏論では値であり、変数であり、関数である。
単純に書くと以下の通りだが、
1 = 1
ペアノの公理(ペアノ数)を使った方が概念的に分かりやすいかも知れない。
data Nat = Zero | Succ Nat
1 = Succ Zero
602デフォルトの名無しさん
2019/10/22(火) 03:15:18.03ID:Id5sXRgE603デフォルトの名無しさん
2019/10/22(火) 07:00:59.60ID:bWQbmCi2 >>590
youtubeにある彼のビデオレクチャーも良いよ
youtubeにある彼のビデオレクチャーも良いよ
604デフォルトの名無しさん
2019/10/22(火) 11:37:49.35ID:QfoZv31s モノイドのところがよくわからんかったけど読み物として面白かった
https://chrispenner.ca/posts/wc
https://chrispenner.ca/posts/wc
605デフォルトの名無しさん
2019/10/22(火) 13:56:22.87ID:bWQbmCi2606デフォルトの名無しさん
2019/10/22(火) 21:21:34.69ID:r5HMg/cf >>601
>数そのものも圏論では値であり、変数であり、関数である。
もしその様な表現が可能な拡張がされた場合何が起きる出来るんですか?
数値に新規の型を設定して値で変数で関数みたいな扱い出来ないかな
>数そのものも圏論では値であり、変数であり、関数である。
もしその様な表現が可能な拡張がされた場合何が起きる出来るんですか?
数値に新規の型を設定して値で変数で関数みたいな扱い出来ないかな
607デフォルトの名無しさん
2019/10/22(火) 21:31:09.36ID:mzkWHCb9 圏論うろおぼえだけどそれって圏論の範疇だっけ?
圏論ってマッピングする理論であってその対象が値か関数か変数か関知しないのでは?
値が関数ってのはラムダ計算から来るものでしょ
確かにそれらを組み合わせて計算理論になるわけだけど
圏論ってマッピングする理論であってその対象が値か関数か変数か関知しないのでは?
値が関数ってのはラムダ計算から来るものでしょ
確かにそれらを組み合わせて計算理論になるわけだけど
608デフォルトの名無しさん
2019/10/23(水) 02:22:17.73ID:yKBkbeD2 >>601
お前が圏論を全く理解していないことは良くわかった
圏論には「関数」とか「値」とか「変数」といった概念はない
「対象」と「射」との2つの概念があるだけだ
だからお前の次の
>数そのものも圏論では値であり、変数であり、関数である
これは単なる間違いさえ通り越して全くのナンセンス
圏論には値も変数も関数も存在しないのだから
何を対象として何を射とするかは個々の具体的な圏によって異なる
お前が圏論を全く理解していないことは良くわかった
圏論には「関数」とか「値」とか「変数」といった概念はない
「対象」と「射」との2つの概念があるだけだ
だからお前の次の
>数そのものも圏論では値であり、変数であり、関数である
これは単なる間違いさえ通り越して全くのナンセンス
圏論には値も変数も関数も存在しないのだから
何を対象として何を射とするかは個々の具体的な圏によって異なる
609デフォルトの名無しさん
2019/10/23(水) 02:25:20.92ID:yKBkbeD2610デフォルトの名無しさん
2019/10/23(水) 02:29:17.74ID:yKBkbeD2611デフォルトの名無しさん
2019/10/23(水) 03:34:04.69ID:yprcaBdP では何らかの制限がないと取り扱いが難しいよね
例えば英語と日本語の翻訳で使われる意味を咀嚼変換するロジックを圏論だと言われたら
なんか凄く難しそうだなとか
例えば英語と日本語の翻訳で使われる意味を咀嚼変換するロジックを圏論だと言われたら
なんか凄く難しそうだなとか
612デフォルトの名無しさん
2019/10/23(水) 07:48:02.01ID:w9X9/NZW 別に集合論だって写像の集合を考えればいいわけでそんなのは圏論を持ち出さなくても十分
重要なのは圏論は写像の合成(関数合成)を抽象化して扱う理論だということで
だからこそa -> IO bを射とする圏を作れればそこでの射の合成方法は普通の関数合成と同じように扱える
で実際にIOはクライスリトリプル(Monadのインスタンス)を定義できるからa -> IO bを射とするクライスリ圏が定義できる
重要なのは圏論は写像の合成(関数合成)を抽象化して扱う理論だということで
だからこそa -> IO bを射とする圏を作れればそこでの射の合成方法は普通の関数合成と同じように扱える
で実際にIOはクライスリトリプル(Monadのインスタンス)を定義できるからa -> IO bを射とするクライスリ圏が定義できる
613デフォルトの名無しさん
2019/10/23(水) 15:46:04.24ID:QE7mhz5K 質問です。
当方数学科卒で学生時代圏論は死ぬほど使ってました。
しかしアーベル圏という純数学的なお話知ってるだけで、計算論に応用する話は全く勉強した事ない状態です。
そういう人間が圏論の計算論への応用を勉強したいときオススメの教科書、参考書は何かご存知ですか?
抽象圏論や数学基礎論も少しかじった事があるのでその手の話が出てきてもあまり困る事はないと思ってます。
当方数学科卒で学生時代圏論は死ぬほど使ってました。
しかしアーベル圏という純数学的なお話知ってるだけで、計算論に応用する話は全く勉強した事ない状態です。
そういう人間が圏論の計算論への応用を勉強したいときオススメの教科書、参考書は何かご存知ですか?
抽象圏論や数学基礎論も少しかじった事があるのでその手の話が出てきてもあまり困る事はないと思ってます。
614デフォルトの名無しさん
2019/10/23(水) 18:37:44.76ID:EHUlBTzl そこまで圏論に詳しいなら逆に世の中の有象無象の情報処理の実態を
見て新しい提案ができるんじゃないかと思うけどどう?
見て新しい提案ができるんじゃないかと思うけどどう?
615デフォルトの名無しさん
2019/10/23(水) 18:48:53.05ID:FecPQc4e 型推論とモナドがわかったら解散でいいじゃん
だらだら続けるとサンクコストが増える
だらだら続けるとサンクコストが増える
616デフォルトの名無しさん
2019/10/23(水) 20:01:33.78ID:r6mLYpNF 浮動小数演算みたいなある種のモナド則が成り立たんものを考えると、
逆にモナド則のありがたさがわかる。
そんな程度で十分だよ。
逆にモナド則のありがたさがわかる。
そんな程度で十分だよ。
617デフォルトの名無しさん
2019/10/23(水) 22:29:52.97ID:0mQ7NQWB どちらかと言えば、モノイドの方が役に立つ
618デフォルトの名無しさん
2019/10/23(水) 22:51:28.42ID:MhItXVwr 浮動小数点のモナド?
モナド則の結合律っぽい奴は普通の関数で言うなら
f (g x) == (f . g y) x を要請してるのであって
f,gの計算には依存しないから浮動小数点が破壊することはないよ
モナド則の結合律っぽい奴は普通の関数で言うなら
f (g x) == (f . g y) x を要請してるのであって
f,gの計算には依存しないから浮動小数点が破壊することはないよ
619デフォルトの名無しさん
2019/10/23(水) 22:55:47.94ID:MhItXVwr ミス f (g x) == (f . g) x だった
620デフォルトの名無しさん
2019/10/24(木) 01:14:02.96ID:iVnwkALy f x = x / 0.3
g x = x * 0.3
g x = x * 0.3
621デフォルトの名無しさん
2019/10/24(木) 01:19:57.43ID:iVnwkALy ghci でやってみたら循環小数にならなかった。macOSの電卓でも。
へぇ〜。
へぇ〜。
622デフォルトの名無しさん
2019/10/24(木) 01:57:21.20ID:/X6zPP1d >>613
> そういう人間が圏論の計算論への応用を勉強したいときオススメの教科書、参考書は何かご存知ですか?
> 抽象圏論や数学基礎論も少しかじった事があるのでその手の話が出てきてもあまり困る事はないと思ってます。
理論計算機科学(以下、TCSと略)への圏論の応用を勉強したいのならば、最もベーシックなテキストとしては
1. Andrea Asperti & Giuseppe Longo: Categories, Types, and Structures, 306+xii pp., MIT Press (1991)
型理論として単純型付きλ計算と2階の型付きλ計算それぞれに対する圏論的意味論を議論している他、
型無しλ計算の意味論を展開する上で不可欠な再帰的領域方程式とその解に対する圏論的な見方も解説している。
更にHaskellなどで喧しいモナドやKreisel圏についても解説している。(関数プログラミング言語へのモナドの応用は
本書の著者の1人であるLongoの論文から全てが始まった)
この本の最大の欠点は誤植がとても多いことと昔のMacで書かれていてテキスト中の数式も図も美しくないことだ。
なお、現在は書籍としては品切れになっていたと思うが、著者のHPから電子的に無料で入手可能になっていたはずなのでネットで探して下さい。
2. Roy L. Crole: Categories for Types, 335+xvii pp., Cambridge University Press (1993)
様々な型理論(型理論は(関数)プログラミング言語とその型システムを形式的体系としたものと考えて良い)に対する圏論的意味論を議論している。
3. 横内寛文:プログラム意味論,261+vi pp.,共立出版 (1994)
久しく品切れになっていたが少し前に増刷されたので現在はジュンク堂などの大型書店などの店頭で買えるはず。
表示的意味論、型無し・型付きλ計算、領域理論、関数型言語の意味論について1つずつ章を設けて解説した後、この本で必要とする圏論の解説がされ、
プログラミング言語の表示的意味論で必須の再帰的領域方程式とその解法に対する圏論からのアプローチと
λ計算の意味論としてλモデル・λ代数・圏論的モデルとしてのCCC(デカルト閉圏あるいは積閉包圏)について解説している。
この他にもTCSへの圏論の応用としてはオートマトン理論への応用や代数的仕様記述言語の意味論への圏論の応用
(こちらの意味論ではデカルト閉圏は使われない)などがある。
> そういう人間が圏論の計算論への応用を勉強したいときオススメの教科書、参考書は何かご存知ですか?
> 抽象圏論や数学基礎論も少しかじった事があるのでその手の話が出てきてもあまり困る事はないと思ってます。
理論計算機科学(以下、TCSと略)への圏論の応用を勉強したいのならば、最もベーシックなテキストとしては
1. Andrea Asperti & Giuseppe Longo: Categories, Types, and Structures, 306+xii pp., MIT Press (1991)
型理論として単純型付きλ計算と2階の型付きλ計算それぞれに対する圏論的意味論を議論している他、
型無しλ計算の意味論を展開する上で不可欠な再帰的領域方程式とその解に対する圏論的な見方も解説している。
更にHaskellなどで喧しいモナドやKreisel圏についても解説している。(関数プログラミング言語へのモナドの応用は
本書の著者の1人であるLongoの論文から全てが始まった)
この本の最大の欠点は誤植がとても多いことと昔のMacで書かれていてテキスト中の数式も図も美しくないことだ。
なお、現在は書籍としては品切れになっていたと思うが、著者のHPから電子的に無料で入手可能になっていたはずなのでネットで探して下さい。
2. Roy L. Crole: Categories for Types, 335+xvii pp., Cambridge University Press (1993)
様々な型理論(型理論は(関数)プログラミング言語とその型システムを形式的体系としたものと考えて良い)に対する圏論的意味論を議論している。
3. 横内寛文:プログラム意味論,261+vi pp.,共立出版 (1994)
久しく品切れになっていたが少し前に増刷されたので現在はジュンク堂などの大型書店などの店頭で買えるはず。
表示的意味論、型無し・型付きλ計算、領域理論、関数型言語の意味論について1つずつ章を設けて解説した後、この本で必要とする圏論の解説がされ、
プログラミング言語の表示的意味論で必須の再帰的領域方程式とその解法に対する圏論からのアプローチと
λ計算の意味論としてλモデル・λ代数・圏論的モデルとしてのCCC(デカルト閉圏あるいは積閉包圏)について解説している。
この他にもTCSへの圏論の応用としてはオートマトン理論への応用や代数的仕様記述言語の意味論への圏論の応用
(こちらの意味論ではデカルト閉圏は使われない)などがある。
623デフォルトの名無しさん
2019/10/24(木) 02:41:27.79ID:/X6zPP1d >>622訂正と補足
まず1に関する説明中の次の箇所を訂正します。つい筆が滑ってKleisliをKreiselと書いてしまった。
誤> 更にHaskellなどで喧しいモナドやKreisel圏についても解説している。(関数プログラミング言語へのモナドの応用は
正> 更にHaskellなどで喧しいモナドやKleisli圏についても解説している。(関数プログラミング言語へのモナドの応用は
それから、
> なお、現在は書籍としては品切れになっていたと思うが、著者のHPから電子的に無料で入手可能になっていたはずなのでネットで探して下さい。
と書いたが、無料の電子版は著者の一人であるLongoの次のURLよりPDFファイルの形で配布されている。
https://www.di.ens.fr/users/longo/files/CategTypesStructures/book.pdf
まず1に関する説明中の次の箇所を訂正します。つい筆が滑ってKleisliをKreiselと書いてしまった。
誤> 更にHaskellなどで喧しいモナドやKreisel圏についても解説している。(関数プログラミング言語へのモナドの応用は
正> 更にHaskellなどで喧しいモナドやKleisli圏についても解説している。(関数プログラミング言語へのモナドの応用は
それから、
> なお、現在は書籍としては品切れになっていたと思うが、著者のHPから電子的に無料で入手可能になっていたはずなのでネットで探して下さい。
と書いたが、無料の電子版は著者の一人であるLongoの次のURLよりPDFファイルの形で配布されている。
https://www.di.ens.fr/users/longo/files/CategTypesStructures/book.pdf
624デフォルトの名無しさん
2019/10/24(木) 09:09:56.34ID:M5uvwdA8625デフォルトの名無しさん
2019/10/24(木) 19:35:38.99ID:iMDLzbYl626デフォルトの名無しさん
2019/10/24(木) 19:42:56.62ID:M5uvwdA8 いやモナド則で語ることなんて結合律以外ないだろ。。
結合律を無条件で仮定できる状況がどれほど負担を減らすかって話なんだが
ここまでバカな絡まれ方するとは思わなかった。
結合律を無条件で仮定できる状況がどれほど負担を減らすかって話なんだが
ここまでバカな絡まれ方するとは思わなかった。
627デフォルトの名無しさん
2019/10/24(木) 19:50:34.49ID:iMDLzbYl ああ、printFile file == readFile file >>= putStrLn だった
しかもそれも誤解しか生まない表現で
要はreadFile file >>= putStrLnをprintFileで置き換えても問題ないってことを言いたかったんだけど
いやほんと5ch向いてないね
しかもそれも誤解しか生まない表現で
要はreadFile file >>= putStrLnをprintFileで置き換えても問題ないってことを言いたかったんだけど
いやほんと5ch向いてないね
628デフォルトの名無しさん
2019/10/24(木) 20:08:28.59ID:3BngmFUW >>627
なんか、あんたは気持ち悪いね
なんか、あんたは気持ち悪いね
629デフォルトの名無しさん
2019/10/24(木) 20:16:05.76ID:iMDLzbYl630デフォルトの名無しさん
2019/10/24(木) 20:22:28.52ID:y9mzZKfZ 単位元を語ってもええんやで
631デフォルトの名無しさん
2019/10/25(金) 04:29:07.52ID:2bZjXkn1 >>629
前提として「足し算の結合律って便利だね」
じゃ足りないの
何が不足なのかな
副作用をモナドの結合連鎖外に及ぼさない事による恩恵が主目的じゃないの?
とくにマルチスレッドコア環境だと色々有難いよね
モナド連鎖の組み合わせとか組み替えとかがスカッとできてイイ!とか
連鎖の中で起きたエラーのリカバリーとかはよくわからん
前提として「足し算の結合律って便利だね」
じゃ足りないの
何が不足なのかな
副作用をモナドの結合連鎖外に及ぼさない事による恩恵が主目的じゃないの?
とくにマルチスレッドコア環境だと色々有難いよね
モナド連鎖の組み合わせとか組み替えとかがスカッとできてイイ!とか
連鎖の中で起きたエラーのリカバリーとかはよくわからん
632デフォルトの名無しさん
2019/10/25(金) 08:07:43.53ID:39WP6mHi >>631
モナドが実際の所どれぐらい便利なのかは分からないけど
(m >>= f) >>= g == m >>= (\x -> f x >>= g)
が言ってることは単純なんだよ
>>=が普通の関数呼び出しのように使えるというだけ
$(普通の関数呼び出しを演算子化したもの)の場合を考えれば分かりやすいかな
g $ (f $ x) == (\y -> g $ (f $ y)) $ x
関数と値の引数が$と>>=では逆だから両辺が逆向きになってるけど
要するに二つの関数を一つの関数まとめても構わないという
誰もが当たり前にやってることの理論的基盤を>>=にも要請してるというだけなんだよ
だから getLine >>= printFile と getLine >>= readFile >>= putStrLn
が同じだと言うためにはこの結合律を満たさなきゃならない
ちなみに二個以上の関数をまとめ上げる場合や多引数の場合もこれで証明できる
モナドが実際の所どれぐらい便利なのかは分からないけど
(m >>= f) >>= g == m >>= (\x -> f x >>= g)
が言ってることは単純なんだよ
>>=が普通の関数呼び出しのように使えるというだけ
$(普通の関数呼び出しを演算子化したもの)の場合を考えれば分かりやすいかな
g $ (f $ x) == (\y -> g $ (f $ y)) $ x
関数と値の引数が$と>>=では逆だから両辺が逆向きになってるけど
要するに二つの関数を一つの関数まとめても構わないという
誰もが当たり前にやってることの理論的基盤を>>=にも要請してるというだけなんだよ
だから getLine >>= printFile と getLine >>= readFile >>= putStrLn
が同じだと言うためにはこの結合律を満たさなきゃならない
ちなみに二個以上の関数をまとめ上げる場合や多引数の場合もこれで証明できる
633デフォルトの名無しさん
2019/10/25(金) 08:33:13.53ID:2bZjXkn1 >>632
モナドの条件が成立すると色々便利な事は認識している
端緒の認識はそれで問題ないと思ったけど
便利だよねって見解が
>こんな糞みたいな主張をする人間が世の中にいることぐらいは分かっておくべきだった
って言われて、え?え?何かマズイ理解なり認識があるのか??
何がマズいのかワカラン??って感想
単純に罵倒してマウント取りたかっただけなら問題ない
モナドの条件が成立すると色々便利な事は認識している
端緒の認識はそれで問題ないと思ったけど
便利だよねって見解が
>こんな糞みたいな主張をする人間が世の中にいることぐらいは分かっておくべきだった
って言われて、え?え?何かマズイ理解なり認識があるのか??
何がマズいのかワカラン??って感想
単純に罵倒してマウント取りたかっただけなら問題ない
634デフォルトの名無しさん
2019/10/25(金) 09:19:09.32ID:dpM8h0bh >>624見たとき何言ってんだコイツと思ったが案の定ボコされてて安心した
論理的な思考ができない人間って怖いわ
論理的な思考ができない人間って怖いわ
635デフォルトの名無しさん
2019/10/25(金) 11:27:36.73ID:2bZjXkn1636デフォルトの名無しさん
2019/10/25(金) 18:07:06.47ID:mPFGj3TJ637デフォルトの名無しさん
2019/10/25(金) 18:15:13.95ID:lPbrkHzC >>633
三段論法的なのが糞だって言ってるだけでその部分は別に間違ってないよ
まあマウンティングするつもりはないんだが
曖昧なこと言っといてそれについて意見したら「バカに絡まれた」なんて
そりゃ感情的にもなるよ確かに大人げないけどさ
三段論法的なのが糞だって言ってるだけでその部分は別に間違ってないよ
まあマウンティングするつもりはないんだが
曖昧なこと言っといてそれについて意見したら「バカに絡まれた」なんて
そりゃ感情的にもなるよ確かに大人げないけどさ
638デフォルトの名無しさん
2019/10/25(金) 18:32:47.40ID:lPbrkHzC639デフォルトの名無しさん
2019/10/25(金) 19:57:54.15ID:jaw68O5t まあかなり意地の悪い例を出したつもりではあったけどね。
「論理的思考」とか言い出す輩が引っかかりそうな例を。
「論理的思考」とか言い出す輩が引っかかりそうな例を。
640デフォルトの名無しさん
2019/10/25(金) 20:50:12.32ID:8KDPUxpr どうでもいいけど「論理的アルゴリズム」だったら簡単にコピーできそう
アルゴリズムとパラダイムの違いの一つは、コピーする自由
アルゴリズムとパラダイムの違いの一つは、コピーする自由
641デフォルトの名無しさん
2019/10/26(土) 00:21:14.14ID:ud4Mu1os モナドの話してる中で一人結合則全般についての話始めて浮動小数点数に関する当たり前の説明せっせとしてんのは草
小学校で習う掛け算も足し算もモナドみたいに便利だけど浮動小数点数はモナドと違って不便だねえ
小学校で習う掛け算も足し算もモナドみたいに便利だけど浮動小数点数はモナドと違って不便だねえ
642デフォルトの名無しさん
2019/10/26(土) 10:10:55.84ID:e6NVGnmw 最近近隣スレで浮動小数点数で恥ずかしい書き込みを繰り返してる香具師を観かけたが
きっとCS知らない浮動小数点数覚えたての厨房が暴れてるんだろう
きっとCS知らない浮動小数点数覚えたての厨房が暴れてるんだろう
643デフォルトの名無しさん
2019/10/26(土) 10:22:10.08ID:az5oKcRh 素人なので確認したい
浮動小数点演算は計算式の組み替えによって生じる
計算ごとの丸め誤差とその蓄積が一意ではない
そこが問題。でいいですか?
浮動小数点演算は計算式の組み替えによって生じる
計算ごとの丸め誤差とその蓄積が一意ではない
そこが問題。でいいですか?
644デフォルトの名無しさん
2019/10/26(土) 12:52:46.96ID:751XFDvk 例えば、3桁の有限桁数で、
123,000 + 987 は、どうなると思う?w
123,000 + 987 は、どうなると思う?w
645デフォルトの名無しさん
2019/10/26(土) 13:03:31.77ID:az5oKcRh646デフォルトの名無しさん
2019/10/27(日) 09:39:17.43ID:E41dDRFH647デフォルトの名無しさん
2019/10/27(日) 12:11:44.86ID:5vE1lFai ヒント
(123000 + 987) + 456
123000 + (987 + 456)
(123000 + 987) + 456
123000 + (987 + 456)
648デフォルトの名無しさん
2019/10/27(日) 12:20:50.14ID:+UrB7+Fx >647
有効桁数3の条件下では
443
443
で結合則?を満たしている
有効桁数3の条件下では
443
443
で結合則?を満たしている
649デフォルトの名無しさん
2019/10/27(日) 14:13:05.51ID:E41dDRFH650デフォルトの名無しさん
2019/10/27(日) 20:56:25.06ID:5vE1lFai >>649
最初からも何も最初言ったの俺じゃないし誰でも気づくだろ
最初からも何も最初言ったの俺じゃないし誰でも気づくだろ
651デフォルトの名無しさん
2019/10/28(月) 15:11:56.47ID:CizzAz3Z 恥の上塗り
652デフォルトの名無しさん
2019/10/31(木) 16:11:16.19ID:Q9035W3u 最近のHaskellは末尾再帰形は当たり前として、余再帰形まで最適化するってマジ?
653デフォルトの名無しさん
2019/10/31(木) 19:47:56.88ID:+pnqrJiF モナドの話すると怒る人が一定数いるのに
最適化の話は難解でもすんなり受け入れられるのなんでだろう
最適化の話は難解でもすんなり受け入れられるのなんでだろう
654デフォルトの名無しさん
2019/10/31(木) 19:53:32.58ID:PeiHf3lU655デフォルトの名無しさん
2019/10/31(木) 20:01:53.96ID:0babd/Ur 年寄りが自分の理解できないことをしゃべるなって
いっているだけでしょ。最適化はなんだかんだいっ
て実践もしくはなんとか理解できる範疇とかでは。
いっているだけでしょ。最適化はなんだかんだいっ
て実践もしくはなんとか理解できる範疇とかでは。
656デフォルトの名無しさん
2019/10/31(木) 20:08:46.83ID:+pnqrJiF 例えば「馬鹿っぽい」の定義はモナドの定義よりもずっと複雑なんだよ
そのわりに「馬鹿っぽい」は難解すぎるという認識はほとんどない
そのわりに「馬鹿っぽい」は難解すぎるという認識はほとんどない
657デフォルトの名無しさん
2019/10/31(木) 21:33:19.89ID:0babd/Ur Haskellや圏論のモナドってライプニッツ由来?ギリシャ哲学由来?
658デフォルトの名無しさん
2019/10/31(木) 22:15:10.01ID:ZttcTVl1 モナドの場合、「俺の理解は正しくて、お前の理解は間違ってる」てな話になりがちだから。
659デフォルトの名無しさん
2019/11/02(土) 11:54:49.10ID:8EQu8ULJ660デフォルトの名無しさん
2019/11/02(土) 21:23:26.95ID:3BGLXMdU 【ぼくようメモ】
Haskellはマルチディスパッチをネイティブサポートしているので、
デザインパターンの一つ、Visitorパターンを気づかない内に使っている。
Haskellはマルチディスパッチをネイティブサポートしているので、
デザインパターンの一つ、Visitorパターンを気づかない内に使っている。
661デフォルトの名無しさん
2019/11/02(土) 22:57:22.40ID:r3wI6psG Haskellを勉強するとどんなメリットが有りますか?
@ Haskellを使って仕事する開発プロジェクトなんてものは世の中に有るのですか?
A @が無いなら開発プロジェクトが無くても仕事の効率化などで、役立てる方法は有るのですか?
B Aも無いなら、勉強して得た知識を日々のJava等の開発プロジェクトで役立てる方法は有るのですか?
@ Haskellを使って仕事する開発プロジェクトなんてものは世の中に有るのですか?
A @が無いなら開発プロジェクトが無くても仕事の効率化などで、役立てる方法は有るのですか?
B Aも無いなら、勉強して得た知識を日々のJava等の開発プロジェクトで役立てる方法は有るのですか?
662デフォルトの名無しさん
2019/11/02(土) 23:45:55.62ID:lY37zOLC 3かな。
コード書く際に
入出力部分と、ディターミニスティックな部分を選り分けるような書き方するようになった。
コード書く際に
入出力部分と、ディターミニスティックな部分を選り分けるような書き方するようになった。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★10 [ぐれ★]
- トランプ氏「台湾侵攻すれば北京爆撃」“過激予告発言”報道がXで再燃「高市氏の1億倍やばい」 [七波羅探題★]
- 【維新国会議員が800万円超の公金を使用】藤田文武共同代表が印刷代569万円を維新市議の「身内企業に支出」していた! [ぐれ★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 ★2 [おっさん友の会★]
- 【ペルソナ・ノン・グラータ】中国総領事の早期国外退去を首相に要請へ 自民・保守系グループ「日本の尊厳と国益を護(まも)る会」 [ぐれ★]
- 【Jリーグ】モンテディオ山形 新スタジアム会員、募集停止 資金計画を再調整、年明け再開予定 [鉄チーズ烏★]
- 高市さん「自賠責を勝手に他の財源に充てるな、返せ」財務省さん、しぶしぶ5700億円を返還 [881878332]
- 中国報道、高市首相を「毒苗」と中傷😡 [399259198]
- 【高市悲報】🇨🇳中国「日本への報復措置? 他にいくらでも方法はある。 まだまだやめないよ」 😨😱 [485983549]
- 【高市】まず父さんの首切り発言が元なのにそれはスルーなのレスバのテクって感じだよな、ジャップって卑怯な癖してこの技術はない [213647114]
- 【悲報】日本、パンダ0にwwwwwwwwwwww高市さんありがとう🐼 [271912485]
- 安倍晋三「円が300円になったらトヨタ車が3分の1で売れる。日本への旅費も3分の1になる。そうすればあっという間に経済は回復していく」 [177178129]
