X



関数型プログラミング言語Haskell Part33

■ このスレッドは過去ログ倉庫に格納されています
0121デフォルトの名無しさん
垢版 |
2020/03/29(日) 21:28:27.32ID:AoSt3bhf
Haskellの理解に圏論は必要ないとよく言われるけど、
End/Coend勉強したらHaskellのポリモーフィズムとか
存在型のことがよくわかったし、
コモナドとか余代数は圏論的理解しといた方が絶対にいいなと思った
今はKan拡張に挑戦中だわ
0123デフォルトの名無しさん
垢版 |
2020/03/29(日) 21:42:16.37ID:dETyGOxM
>>121
理解が何を指しているかによる

haskellでwebアプリやゲームを作ることができる
というのが理解の指標なら、圏論は知らなくてもいい
0124デフォルトの名無しさん
垢版 |
2020/03/29(日) 21:46:33.53ID:AoSt3bhf
>>123
ekmettのライブラリとかHaskellの型システムを強化する言語拡張など、高度に抽象的なコンストラクションがどういう意図で作られていてどういう場面で役に立つのか
0125デフォルトの名無しさん
垢版 |
2020/03/30(月) 04:34:10.51ID:BWxPCUH7
>>121
うい。
知ってた方が良いけど、知らなくても使えはする。
むしろ最近はHaskellより圏論に興味が移ってる。
(Haskellやその他の言語はその理論の確認用)
0126デフォルトの名無しさん
垢版 |
2020/03/30(月) 04:43:23.39ID:BWxPCUH7
>>66
手続き型言語と数学の関連性が見える様になると、数学的に正しい=バグが無いプログラムを書けるようになる。
だったら数学(特に圏論)だけで良いんだけど、ほぼ数学なHaskellで実際に動かして手続き型言語と数学の共通点を確認出来る。
0127デフォルトの名無しさん
垢版 |
2020/03/30(月) 04:50:50.17ID:BWxPCUH7
モナドについてはDSLと言うのは言い得て妙で、mainはIO ()を得るために式を展開する。
その過程で副作用を含む式が動き出す。
個人的にはHaskellは副作用は有るが、参照透明性は崩れていないと言うのがHaskellが純粋関数型言語を主張する根拠なのだと思う。
0128デフォルトの名無しさん
垢版 |
2020/03/30(月) 05:26:16.39ID:RViSHasz
アプリを作ることに限れば、圏論の触り部分すら知らなくても問題ない。

C#やJava、Pythonは大して深く理解していない入門を抜けたばかりの人でも、
アドバイスを受けながら一通りアプリを完成させられるでしょ。
未知の必要なライブラリも本やドキュメントを読んで使い方を学べるでしょ。

haskellもまったく同じ。
入門を抜けたらすぐにアプリを作れる(し、そうすべきだと個人的には思う)。
そこに圏論の知識は微塵も要らない。

圏論の知識が活きるのは意味論をしっかり考える時だ。
**に圏論が役立ったよ、圏論のおかげで**が理解できたよと言っている人は、
意識的にせよ無意識的にせよ、その**の意味論を考えてたのではないか。

それ自体は素晴らしいことだと思う。
でもそこまでの深い理解がなくても実用的なアプリは問題なく作れる。

因みに、バグを減らすのにも圏論の知識は必要ない。
0129デフォルトの名無しさん
垢版 |
2020/03/30(月) 07:45:32.21ID:b0eBXbnt
HaskellをやってるうちにHaskellの魅力に気づいて
Haskellで何かを作るよりもHaskellという言語自体のことをもっと深く知りたくなることもあるだろ
そう言う場合に圏論は最良の選択だよ

俺としては、Haskellでアプリを作るためにはまあ圏論を知らなくてもいいと思うけど、
圏論を勉強すれば、より高い視点から見えるものもある
必須じゃないが、苦労して圏論を学んだボーナスだな
0130デフォルトの名無しさん
垢版 |
2020/03/30(月) 09:41:29.75ID:rvpoYgUk
モナドがらみだとF#のコンピューテーション式使って
async定義されてるらしいな ちょっと、モナド凄いと思ってしまった

裏で共通作業をするって意味なら分からなくはないけど、
その仕掛けは気になる

F# vNext は何が "ヤバい" のか: Monadic Programming の新時代
https://qiita.com/cannorin/items/1936faded610c3ab6c18
0131デフォルトの名無しさん
垢版 |
2020/03/30(月) 18:05:04.07ID:Dztwglzx
型クラスとインターフェースがなんとなく似てるので、
型クラスのようなことをインターフェースでまねしようとしてなんか違う…ってなってたけど、やっとなぜなのかわかった

インターフェース(クラスポリモーフィズム)って、そもそも型クラスとは全く別物で、むしろ存在型の一例になってるだな
やっぱり型クラスは型クラスで、型クラスのない言語でこ対応物なんてなかったんや
0134デフォルトの名無しさん
垢版 |
2020/03/31(火) 11:43:52.10ID:0EnDwwx5
目的はお金でも知識でもいいよ
例えばお金自体が目的だったらそのお金が無駄に多過ぎるんじゃないかとか心配する必要はない
0136デフォルトの名無しさん
垢版 |
2020/03/31(火) 13:55:00.32ID:0EnDwwx5
事前に目的を決めても「俺すげーしたいだけ」とかいう真の目的が後から出てくる
事前に嘘をついていたことか問題だと思えば沈黙が正解

だが隠し事をしていたことが問題だと思えば沈黙は悪
黙っているくらいなら嘘でも何か言った方がマシと思ってますます嘘が増える
0137デフォルトの名無しさん
垢版 |
2020/03/31(火) 18:03:32.10ID:pMTrfgV+
存在しない敵に吠え続ける
0138デフォルトの名無しさん
垢版 |
2020/03/31(火) 18:05:52.76ID:j91gJgzW
>>135
学歴コンプやばそう
0139デフォルトの名無しさん
垢版 |
2020/03/31(火) 21:38:58.38ID:OTxurRkT
だから金だろうと知識だろうと、学歴だろうとなんでもいいんだよ。
糞みたいなプライドで開発の邪魔しなけりゃな。
0140デフォルトの名無しさん
垢版 |
2020/03/31(火) 23:05:18.94ID:gNdJtX6R
学歴だろうと知識だろうと仕事の腕前だろうと、
お前らキモオタクがそういう承認欲求を満たそうとすると裏目に出るだけだぞ
表ではお世辞であしらわれて、裏ではチョロいとナメられるのがオチ
0141デフォルトの名無しさん
垢版 |
2020/03/31(火) 23:24:14.95
トンデモを惹きつけてしまうのは Haskell の業
アイドルにストーカーがついてまわるのと抽象的構造が似ている
Haskell は高度知的アイドル型言語
0145デフォルトの名無しさん
垢版 |
2020/04/01(水) 13:27:17.06ID:0siDwK7Q
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0

UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0

学術巨大掲示板群: アルファ・ラボ
ttp://x0000.net

物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など
0148デフォルトの名無しさん
垢版 |
2020/04/02(木) 01:48:53.35ID:l/tHPd/2
Haskellって技術書少ないよな
みんな何で勉強してんの?
0149デフォルトの名無しさん
垢版 |
2020/04/02(木) 05:42:29.80ID:RR8wjO3M
>>148

マイナー言語の割には多いと思うけど。

人気ランクが上のkotlinやclojure、elmは少ないし、同じぐらいの順位のprologやsmalltalkは新刊が出てなくて、昔出た書籍のほとんどが絶版している。
0151デフォルトの名無しさん
垢版 |
2020/04/02(木) 06:33:57.84ID:6/i0fPdP
>>148
特別なことはなく、ネットや本で学んだよ
例えば

・Thinking wih Types
型レベルプログラミングを学んだ
https://leanpub.com/thinking-with-types

・Optics By Example
lensに代表されるopticsを学んだ
https://leanpub.com/optics-by-example

・Hexagonal architecture
Haskell & DDD でアプリを作るパターンの一つを学んだ
https://blog.ploeh.dk/2016/03/18/functional-architecture-is-ports-and-adapters/

・Effect system
IOを安全に扱う方法を学んだ (正確にはモナドの合成を分かりやすく扱う方法)
DDDによるアプリ制作においてさっきのが戦略とすれば、こっちは戦術
http://okmij.org/ftp/Haskell/extensible/exteff.pdf
ライブラリもいくつかある

あと、Redditの投稿を追いかけていれば色々学べる
https://www.reddit.com/r/haskell/


と言うか、紹介しきれないほどの情報がネットに溢れているんだが
0152デフォルトの名無しさん
垢版 |
2020/04/02(木) 15:08:36.64ID:ttPPzFzn
情報収集のスキルは人それぞれでしょ
reddit はニッチなライブラリの質問とかリリース情報みたいなの多くね?
かったるくていちいち追ってられない

俺はそういうのは twitter にいる Haskell 賢人に任せている
これ面白いよ!って記事をフィルタして共有してくれるから、それ読んで勉強してる
ありがたや ありがたや
0154デフォルトの名無しさん
垢版 |
2020/04/03(金) 02:49:35.37ID:y19+kh0E
>>150
日本語の書籍の事だろ?
それは先ずない
ロシアが次点あとはドイツなんかも結構あるドイツは翻訳ばっかだが(´・ω・`)
0159デフォルトの名無しさん
垢版 |
2020/04/03(金) 16:45:57.10ID:ked6xspS
日本の翻訳文化って外国語を自国語に取り込んじゃうのがすごいとかなんとかって話で、翻訳量自体は別にそれほどでもなかった気がする
0160デフォルトの名無しさん
垢版 |
2020/04/03(金) 17:43:30.64ID:VVxcL9Mv
オーバーシュートω
ロックダウンωωω
0161デフォルトの名無しさん
垢版 |
2020/04/03(金) 17:47:56.79ID:JepZACIl
マジレスすると多分中国語が英語の次だろうな
場合によっちゃ英語より多いかもしれん
中国語の場合は入ってくるだけで出ていかないブラックホールだから実態が掴みにくい
0164デフォルトの名無しさん
垢版 |
2020/04/03(金) 18:57:42.55ID:Yw161NPN
はーい先生怒らないから犯人は正直に手を挙げなさい

>「プログラミング初心者なんですけど、何からやったらいいですか?
> 最近ようやくJavaScriptが少しだけ読めるようになってきた頃です」。
>
> そうしたら「JavaScriptなんて暗黒で恐ろしい言語はダメだ、純粋関数型言語であるHaskellからやった方がいい」みたいなことを言われました。

https://codezine.jp/article/detail/11885
> 「わからなかったけど、コードを書いて動かす楽しみと快感を覚えたんですよ。
> Haskellをもっと理解したいと相談したら、『圏論の基礎』という本を勧められました。
> でもその本も全然わからなかったんです(笑)」
0166デフォルトの名無しさん
垢版 |
2020/04/03(金) 20:09:26.90ID:Yw161NPN
初手マックレーンは草 ...ってか鬼畜
もっとこう RealWorldHaskell とかあるでしょ
0167デフォルトの名無しさん
垢版 |
2020/04/03(金) 20:11:51.67ID:Yw161NPN
>>163
エンジニアの容姿を判定するのは無しだろうよ...
なんだ Haskell は、高潔なのは言語仕様だけか?
0170デフォルトの名無しさん
垢版 |
2020/04/03(金) 23:36:38.26ID:Wo72KAYJ
学術的に進化してもらって
実用的な部分をメジャー言語が取り込んでくれればおk
0171デフォルトの名無しさん
垢版 |
2020/04/04(土) 00:13:54.60ID:HfszwI8c
>>151
>例えば
テンプレ入
0173デフォルトの名無しさん
垢版 |
2020/04/04(土) 14:52:35.68ID:ym7hUMuJ
むしろミーハーでもなんでも構わんのだけど、いち Haskeller が女性ってだけで
容姿を蔑んだり・持ち上げたりする連中がいるなら――もしいるのなら反省してほしい、と思った。

DSL を Freeモナドにするか、Tagless Final にするか、それぞれのメリットはなにか…
Haskeller はそういうことで悩んでいたいのであって、性別とかを理由に余計な荷物を背負わせるべきじゃない。
(ghc も依存している llvm はそういう辛さを避ける為に行動規範を定めているんだけど、いまのところまだ ghc には無いっぽい)
https://llvm.org/docs/CodeOfConduct.html
0174デフォルトの名無しさん
垢版 |
2020/04/04(土) 14:56:51.64ID:ym7hUMuJ
>>169
個人的な Haskell のイメージは、なんかシュッとした紳士みたいな感じ
エラーメッセージは確かに、ともすると口うるさいw
0176デフォルトの名無しさん
垢版 |
2020/04/04(土) 17:30:47.61ID:V7kxF8pu
haskellでやり過ぎなほど徹底的に宣言性にこだわってプログラムする実験をしてみたが、なかなか面白いぞ。
手続き的になりがちなゲームプログラミングでやってみると特に。
0177デフォルトの名無しさん
垢版 |
2020/04/04(土) 20:17:31.82ID:H4c+c10U
今から出会い系の女と会ってくるがやばいんか?
0182デフォルトの名無しさん
垢版 |
2020/04/05(日) 14:28:05.53ID:k4Q+DqWZ
>>181
HaskellでActionという用語をみたことが俺はないけど、Haskell直系の子孫のPureScriptだと
型注釈の->の右辺にEffectがある関数をアクションと定義するそうだ。
EffectはHaskellでいうIOに対応すると思ってもらえたらいい。
ちなみに->の左辺にEffectがある関数をハンドラという。


-- アクション
throwException :: forall a. Error -> Effect a

-- ハンドラ
catchException :: forall a. (Error -> Effect a) -> Effect a -> Effect a
0191デフォルトの名無しさん
垢版 |
2020/04/06(月) 09:29:24.23ID:H7siEM1Y
CabalのドキュメントのSecure repository のところ、
root.jsonのkey idを省略するのはお勧めしないとか書いてるけど、
なにかしないといけないの?
0193デフォルトの名無しさん
垢版 |
2020/04/07(火) 07:33:13.33ID:UmG0jYGu
本当に言語に詳しい奴ってのはその言語の弱点をしっかりおさえてるもんよ。
0194デフォルトの名無しさん
垢版 |
2020/04/07(火) 07:36:16.93ID:SJ9J2Mim
0195デフォルトの名無しさん
垢版 |
2020/04/08(水) 08:37:32.33
IO がオルタナティヴになったのって最近なのか
Aizu Online Judge のGHCだとコンパイルエラーになる
0197デフォルトの名無しさん
垢版 |
2020/04/12(日) 14:46:14.07ID:qLx35nn/
目的は二つ
式を評価し過ぎないこと
副作用を実行し過ぎないこと

手段はただ一つ
最外簡約
0199デフォルトの名無しさん
垢版 |
2020/04/12(日) 19:41:52.11ID:EEQhx4+u
codewarの問題をHaskellで解いてみてるんだけど
、12000msタイムアウト多発する
リスト内包表記とか再帰はHaskellerはあんまり使わないの?
nに含まれる素因数とかすぐタイムアウトする
0200デフォルトの名無しさん
垢版 |
2020/04/12(日) 21:46:48.73ID:ogEgOOCw
>>199
arithmoiとかのライブラリ使うとめっちゃ速いよ
ソースを見てみるといいかも

あと、prime factorization haskell
とかをキーワードにして検索してみるとか
0201デフォルトの名無しさん
垢版 |
2020/04/12(日) 22:42:42.81
Haskell で競プロ辛い・・・
200000個の整数読み込んで処理するような問題だとMLEになりがちだ
本当にそんなに使ってるのかよ・・・疑わしいなぁ

ランタイムがとりあえずあるだけ使おうとして、足りなくなったらもう要らない空間を探して、そこに上書きするようにしてるの?
だとすると、とりあえずあるだけ使おう期間の段階で上限ぶっちぎってるってことかね
もしかして

GHC「記憶域ください」
競プロシステム「あなたは上限なのでもうあげません」
GHC「仕方ないな、じゃあガベージコレクションしてなんとかやりくりしよう」

ではなくて

GHC「記憶域ください」
競プロシステム「どうぞどうぞ」
GHC「どうも」
競プロシステム「はいそれは毒まんじゅうです。今のでMLEです」
GHC「えっ!!!!」

こうなんじゃないか?
ソースコードで「メモリ使用はは150MB以内で巧くやりくりしろ」とかって制限の指示できないんですか?
0206デフォルトの名無しさん
垢版 |
2020/04/13(月) 06:56:02.05ID:rnoGia+U
競プロ mle でググってみた

MLE
メモリリミットエラー(Memory Limit Error)の略
提出したプログラムが許可された以上のメモリを使用したときに出る
(一部のコンテストで採用されている表現)
0207デフォルトの名無しさん
垢版 |
2020/04/13(月) 12:33:53.04ID:tr0y4100
>>201
とりあえずローカルでプロファイル取って実行してみると
スペースリークや大量のGCの原因が推定できるはず
(「Haskell プロファイラ」とかでぐぐって)
未評価のサンクが大量に積み上がっているとか、
イミュータブルな連結リストの使い方が悪くて
大量の一時リストを作ってしまっているとか
あたりじゃないかと想像してみる
0208デフォルトの名無しさん
垢版 |
2020/04/13(月) 13:06:48.82ID:pEw+DEbK
タイムアウトのやつ
この問題やってて
ttps://www.codewars.com/kata/54d496788776e49e6b00052f/train/haskell

通らないコードがこれ
sumOfDivided :: [Integer] -> [(Integer, Integer)]
sumOfDivided xs = map (\x -> (x,foldr (+) 0 (filter ((==0).(flip rem x) ) xs)) ) $ prime_factors ( product xs) 2
where
prime_factors 1 _ = []
prime_factors m n
| rem m n == 0 = n : (prime_factors (quot m n) $ n+1)
| otherwise = prime_factors m $ n+1

こういう感じでコード組み立てるんだけど、他の問題でもしょっちゅうタイムアウト起こしてる
応答の速いコードにするにはどんなふうに変えていけばいいかを知りたい
cで言うと値コピーしてソートしないでポインタでソートすると速いみたいな
0209デフォルトの名無しさん
垢版 |
2020/04/13(月) 21:38:04.55ID:tr0y4100
>>208
どう改善すればいいかはすぐにはわからないが
prime_factors関数は末尾再帰ではない再帰をしているから容易にスペースリークしそうな感じはする
0210デフォルトの名無しさん
垢版 |
2020/04/14(火) 00:39:23.37
できるだけリストを避けて
読み込みもByteString 版 getContents と readInt の組み合わせで高速化
そして困ったときの Data.Sequence 様やで!

C系提出者は軒並み 0.1 s で処理を終えている中、220MB 1.9 s 弱かけてなんとか致命傷でかいくぐった
制限超過してる気がするが、マイナー言語へのアファーマティブアクションかな?
くぅ〜疲れましたw これにて AC です!
0211デフォルトの名無しさん
垢版 |
2020/04/14(火) 01:34:33.76
>>208
prime_factorsだけど
quotRem なら一回で両方得られる
探索は3から+2ずつ探すべき
n が√m を超えてしまったら探索を打ち切るべき

リストの整数全部に出てくる素因数を予めリストアップしたいんだろうけど
そのprime_factorsだと絶対に素因数が存在しない、(2を除く)偶数空間と√mの後の空間をmに達するまで探していてとてもとても無駄
この無駄はmが大きいほど酷いことになるが、見事に君のコードはproductなんてしてmを巨大化させている
例えば、1000000 の素因数は少なくとも1000 以降は存在しないのに1001, 1002, 1003, ... , 999998, 999999, 1000000 まで探すところを想像してみて

一目気づいたのはそんなところかね。先ずはそこを直してから一局といったところか
0212デフォルトの名無しさん
垢版 |
2020/04/14(火) 01:52:08.41
>>207
まあ最終手段はそうなるんでしょうね
しかし早すぎる段階での最適化はたいてい悪手って言われてるし
その前に、アルゴリズムの選定が間違ってるんではとなって、あれこれ作戦変えて
いつしか通るわけです。すると結局いつまで経ってもプロファイリングを練習する機会が来ないんですよね
0213デフォルトの名無しさん
垢版 |
2020/04/14(火) 01:54:06.60
あ、いや、あれこれ作戦変えるヒントを得る為にプロファイリングするのか・・・
やっぱり手を出してみるか
0214デフォルトの名無しさん
垢版 |
2020/04/14(火) 10:48:29.31ID:Ez55nAck
異世界人「アルゴリズムをあれこれ変える」
主人公「言語をあれこれ変えてみよう」
0216デフォルトの名無しさん
垢版 |
2020/04/15(水) 17:46:40.69ID:/WUIZ9Nz
>>211
39の素因数って3,13よね?
√39が6くらいだから探索区間は√mじゃ不十分かなって
でも確かに偶数はいらないから2:[3,5..]でいいね
全部の素因数のリスト作るのに全部掛け合わせて処理はひどいなと見直して思った
リストは早くするなら使わない方針なのね

Quatremとリスト以外(sequenceが代替?)調べて組み込んでみようかな
0217デフォルトの名無しさん
垢版 |
2020/04/15(水) 17:47:28.61ID:/WUIZ9Nz
お礼書き忘れたすみません
回答ありがとうございますなんとか通ってもらいます
0218デフォルトの名無しさん
垢版 |
2020/04/15(水) 19:54:09.51ID:JKZ0KcR7
>>216
なんの話かよく知らないけど39を素因数分解してるのなら、
約数として3が見つかったら、その時点でもう39が素数じゃないことが判明するから、13を調べる必要ないよ
√39以下の数字調べればオッケー
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況