[過去ログ] 関数型プログラミング言語Haskell Part33 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
936
(3): 2021/10/29(金)12:55 ID:SqmTIce6(1) AAS
不動点演算子がわからなくて泣ける
再帰呼び出しになってないのに再帰になってるのはわかるんだけど
937
(1): 2021/10/29(金)18:35 ID:ZN5Hp6rJ(1/2) AAS
>>936
何が分からないのか分からない
938
(1): 2021/10/29(金)18:40 ID:uCUCIWXe(1) AAS
>>937
なんでわかるんや?
才能か?
後不動点定理がわからん
勉強しろって言われてるけど
939: 2021/10/29(金)20:05 ID:1mMf/Evz(1) AAS
遅延評価の才能がないと x = f x を思いつかないんだよな
y f = f (y f) しか分からない
940: 2021/10/29(金)21:04 ID:ZN5Hp6rJ(2/2) AAS
>>936 の何もかもが、こちらには分からない。
愚痴を言いたいだけなのか、それとも何か質問をしたいのか。
後者なら、質問内容は何か。

>>938
> 後不動点定理がわからん
それだけなら、勉強してくださいとしか言いようがない。

勉強しろと言われているのなら、何か資料が配られたり、
参考文献が挙げられたりしていないのか?
そういうのが既にあるのなら、取りあえず全てに当たって、
今分かる部分と分からない部分を徹底的に細かく仕訳してみればいいのでは?
941: 2021/11/05(金)06:38 ID:UB8UVAT8(1) AAS
>>936
分からないのは何故再帰処理してるのかじゃなくて(そこは定義的に明らかだし)、
どうして無限ループせずに終了するのかでいいのかな
942
(1): 2021/11/14(日)05:07 ID:HK5ctRa0(1) AAS
やっと Monad クラスから return が消えるよ
まだ計画段階たけど
外部リンク:github.com
943
(1): 2021/11/14(日)21:26 ID:bsdXePE0(1) AAS
なんで消すの?
944
(1): 2021/11/15(月)02:14 ID:jBQU3T8q(1) AAS
>>943
Applicativeクラスにpure関数があるから。
Monad則やApplicative則を満たしてるなら、
まず間違いなく pure = return だから片方で充分。

それにreturnって名前があまりに実態とかけ離れてるしね。
945
(1): 2021/11/15(月)12:46 ID:KyLp+2Ep(1) AAS
初歩的な質問ですが、複数の設定ファイル読み込みするのに
readFile で全体取得してから処理するのと
withFile で hGetLine しながら処理するのではどちらがいいとかありますか?
主に処理速度の点について聞きたいです。
946: 2021/11/15(月)18:22 ID:W9vQbDtp(1) AAS
>>945
そういうのは、自分で実験すればすぐに確かめられるのでは?
947
(1): 2021/11/15(月)21:51 ID:NLyY6NK4(1) AAS
>>944
Applicativeにpureがあるのはなんで?
Monadのreturnだけにするのは変ですか?
零元がApplicativeの責務なのがピンときてないんです。Monadだと何と合わないんでしょう
948: 2021/11/16(火)02:22 ID:EE8p/B0u(1) AAS
>>947
できるだけ一次情報に当たりましょう。
>>942 のリンク先の Planned: remove return from Monad の項目の
Proposal のリンク先を読んで下さい。
(更にその先の dudcusdion なども)
それが最も正確で、かつ、分かりやすいです。
949: 2021/11/16(火)21:38 ID:au51kzu/(1) AAS
正確に綴ってくれ
950
(1): 2021/11/16(火)22:40 ID:t6DDIn3B(1/2) AAS
読んでみたけどよくわかんないなあ。AMPを満たすためにApplicative m => Monad mが必要ってことは書いてあるようだけど
Monadからreturnを削除して、pureに統一する理由って書いてあるかな?
読み飛ばしたかもしれんけど。

return = pureだから、統一しても同じっていうのは分かるんだけど、Applicativeにpureが必要な理由がわからない。
Applicativeの4つのルールを満たすためにpureが必要なことは、Applicativeの定義に書いてあるけど、圏論わかんないから、このルールが何で必要なのか分からん。

Monoidal Functor?とかいうやつの表現のために単位元(零元じゃなかったね)が必要なんだろうけど、圏論わからんないから分からん。

Monoidと関係あるんだろうか。それなら加法のために単位元が必要なのはわかるんだけど。
951: 2021/11/16(火)22:42 ID:t6DDIn3B(2/2) AAS
誰か噛み砕いて教えて下さい
952: 2021/11/17(水)06:46 ID:4zMdVbrs(1) AAS
より抽象度の高い方であるApplicativeのpureを生かすのは
私はごく自然に感じるけど

mappendと<>も機能的にダブってるから
将来Monoidからmappendが消えるよって
Monoidのドキュメントに書いてあるけど
もしかしてそれも疑問だったりする?

Semigroupの方から<>を消して、
Monoidのmappendを残すんじゃダメなの? って
953: 2021/11/17(水)08:05 ID:fLzDfeGp(1) AAS
>>950
圏論は一切関係なく、いかに誤りの無いプログラムが書けるか、
またソースコードが読みやすくなるかという実用的な理由です。
そういう観点でもう一度読んでみてください。

Haskellは実用的な汎用プログラミング言語であることを目指して作られました。
なので、今回のような理由での提案は個人的にはすごく納得できるし、大賛成です。
954: 2021/11/17(水)12:44 ID:f9gix7Cx(1/3) AAS
コメントありがとです。
Semigroupは半群、Monoidは単位元付きの半群ですよね。
言われてみると、<>に統一してmappendは消しても自然な気がする。
すごいHでログ文字列がmappendで追加されていく、サンプルを読んだことがあるので、Monoidは受け入れやすいんです。
Semigroupに単位元がないことは不思議に思わないです。半群というものを聞いたことがあったのと、
ログの例に戻ると、文字列なしのログはありえないと考えれば、単位元がないMonoidがあってもあまり不思議に思わないです。

言ってることが上と変わってきてるかもしれないですが、Applicativeが不思議に思うのは、ここに単位元?(というか単位元を生成する)pureがあること。
Applicativeの結合<*>って持ち上げられた型だけで構成されてます: f (a -> b) -> f a -> f b。
圏論何も知らないで言いますが、単位元pureは持ち上げられた型f aが自然な気がするんです。a -> f aではなく。
雰囲気でそう感じてるだけですが。

そんでもって、a -> f aが登場するのって、Monad.(>>=)だよなあってことで、だったら、returnがMonadにあるのは自然なんじゃないかな、と思うわけです。
そうすると、pureってなんのためにあるんだろう。同じ型ならMonadだけあるほうが自然だなと感じたわけです。

たぶんこれは圏論を知っていれば、変に思わないのかなと思って、そう言ったわけです。
推敲できてない感ありますが、伝わりますかね?
955: 2021/11/17(水)12:50 ID:f9gix7Cx(2/3) AAS
ちなみに自分は、自分の価値観に反してるから却下すべきだと言ってるのではなくて、
どうしてこういう構造が正しいの?実際の理論やコードでの利用例に照らしてどんな利点や意味があるのと知りたいだけです。
956
(1): 2021/11/17(水)15:59 ID:oGkdvxh0(1) AAS
そもそもapplicativeなるものが数学の圏論的に何意味するかよくわからんのだよな
monadの方はwikiのmonad (category theory)の項があってキッチリ解説されてるし

外部リンク:en.m.wikipedia.org

Tがcategory C上のmonadであるときfmap Tをμ。η_Tで定めればコレがfunctor C→Cを定義するのもわかるんだけど、applicativeについておんなじような解説が中々見当たらない
どっかでDescartes closed categoryがどうたらいうのを見た事あるんだけど誰か知りません?
957: 2021/11/17(水)16:59 ID:fpCU2YNN(1) AAS
「アプリカティブ関手はモノイド圏における強laxモノイド関手だよ、何か問題でも?」
外部リンク:blog.miz-ar.info
958: 2021/11/17(水)17:27 ID:f9gix7Cx(3/3) AAS
>>956
多分これの概要部分は見てるんですよね。
外部リンク:en.m.wikipedia.org
後ろの方はさておき、概要部分は自分はさっぱりでしたが。
959
(1): 2021/11/30(火)20:23 ID:SegqCGCa(1/2) AAS
haskell勉強しようかなって思ってるんですけどおすすめ書籍ってなにかありませんか?
ちなみにocamlでプログラム書いたことあります
型システム入門を原文で7割ほど読破しました
ちなみに大学受験の数学はそこそこ自信あります
一階述語論理の記号扱って解いていました
圏論の知識はありません
960: 2021/11/30(火)20:27 ID:SegqCGCa(2/2) AAS
ちなみにモナドは日本語版wikipediaの記事を読んだのみです
型クラスはわかります
MaybeまではわかりましたがIOモナドで躓きました
ocamlとは違って参照型がない言語だってことは意外に思いました
961: 2021/12/02(木)00:19 ID:c82IwjxK(1/2) AAS
(>>=)がただのデータコンストラクタだったらモナドはただの構文木なのに

data M b = Bind (M a) (a -> M b) | ...

みたいな定義ができない型システムだから
代数的データ型を使わないでラムダをたくさん使うことになってみんな躓く
962
(1): 2021/12/02(木)13:13 ID:kpMV/tat(1) AAS
そりゃそうやろ?
データコンストラクタと展開されるべき関数の違いをプログラマが指定しなければ処理系は与えられたexpressionをどこまで展開すべきか決定できんやろ?
963
(1): 2021/12/02(木)14:49 ID:ISSe07L0(1) AAS
>>959
Haskellを始める前に仕入れたそのような知識やOCamlの経験が、
Haskellの学習にいったいどんな影響を与えるのか、
楽にするのか、それとも邪魔にしかならないのか、正直まったく分からん。
Haskellで何をしたいのか、目的や目標も分からんし。

なので、Haskell入門者という観点だけで次の2点をすすめる。

さっと要点を学んで早くアプリを作り始めたいのなら、薄い入門書で十分。
「Learn You a Haskell for Great Good!」
が良いと思う。

ガッツリ学びたい、かつ、時間と根気があるのなら、
「Haskell Programming from first principles」
がおすすめ。

詳しくはどちらも公式サイトを参照して。

なにで学習するにしても、手や頭を動かす(プログラミングする)のが主で、
本やドキュメントを読むのは従であることを忘れずに。
964: 2021/12/02(木)17:56 ID:35Q5ApkZ(1) AAS
>>963
すみません
関数型言語って敷居が高そうなイメージあってやるにはある程度数学の素養が求められるのかなって思っていろいろ自分なりの知識があるところ挙げてみました
特に型システム入門は型推論の理論とか分かっていたほうがいいのかなと思って読んでいました
まずはLearn youの方を読んで見ようと思います
ありがとうございました
965: 2021/12/02(木)20:33 ID:c82IwjxK(2/2) AAS
>>962
ただし、IOモナドは「展開」できない方がいい
そうすれば処理系がexpressionをどれだけ「展開」しても副作用がない
1-
あと 37 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.019s