- 1 名前:デフォルトの名無しさん [2020/02/10(月) 18:17:36 ID:L6eYQqyh.net]
- 関数型プログラミング言語 Haskell について語るスレです。
Haskell Language(公式サイト) https://www.haskell.org/ 日本Haskellユーザーグループ - Haskell-jp https://haskell.jp/ 前スレ 関数型プログラミング言語Haskell Part32 https://mevius.5ch.net/test/read.cgi/tech/1548720347/
- 123 名前:デフォルトの名無しさん [2020/03/29(日) 21:28:27.32 ID:AoSt3bhf.net]
- Haskellの理解に圏論は必要ないとよく言われるけど、
End/Coend勉強したらHaskellのポリモーフィズムとか 存在型のことがよくわかったし、 コモナドとか余代数は圏論的理解しといた方が絶対にいいなと思った 今はKan拡張に挑戦中だわ
- 124 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 21:37:39.83 ID:i8zPSo78.net]
- なにで勉強してるの?
- 125 名前:デフォルトの名無しさん mailto:sage [2020/03/29(日) 21:42:16.37 ID:dETyGOxM.net]
- >>121
理解が何を指しているかによる haskellでwebアプリやゲームを作ることができる というのが理解の指標なら、圏論は知らなくてもいい
- 126 名前:デフォルトの名無しさん [2020/03/29(日) 21:46:33.53 ID:AoSt3bhf.net]
- >>123
ekmettのライブラリとかHaskellの型システムを強化する言語拡張など、高度に抽象的なコンストラクションがどういう意図で作られていてどういう場面で役に立つのか
- 127 名前:デフォルトの名無しさん [2020/03/30(月) 04:34:10 ID:BWxPCUH7.net]
- >>121
うい。 知ってた方が良いけど、知らなくても使えはする。 むしろ最近はHaskellより圏論に興味が移ってる。 (Haskellやその他の言語はその理論の確認用)
- 128 名前:デフォルトの名無しさん [2020/03/30(月) 04:43:23.39 ID:BWxPCUH7.net]
- >>66
手続き型言語と数学の関連性が見える様になると、数学的に正しい=バグが無いプログラムを書けるようになる。 だったら数学(特に圏論)だけで良いんだけど、ほぼ数学なHaskellで実際に動かして手続き型言語と数学の共通点を確認出来る。
- 129 名前:デフォルトの名無しさん [2020/03/30(月) 04:50:50.17 ID:BWxPCUH7.net]
- モナドについてはDSLと言うのは言い得て妙で、mainはIO ()を得るために式を展開する。
その過程で副作用を含む式が動き出す。 個人的にはHaskellは副作用は有るが、参照透明性は崩れていないと言うのがHaskellが純粋関数型言語を主張する根拠なのだと思う。
- 130 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 05:26:16.39 ID:RViSHasz.net]
- アプリを作ることに限れば、圏論の触り部分すら知らなくても問題ない。
C#やJava、Pythonは大して深く理解していない入門を抜けたばかりの人でも、 アドバイスを受けながら一通りアプリを完成させられるでしょ。 未知の必要なライブラリも本やドキュメントを読んで使い方を学べるでしょ。 haskellもまったく同じ。 入門を抜けたらすぐにアプリを作れる(し、そうすべきだと個人的には思う)。 そこに圏論の知識は微塵も要らない。 圏論の知識が活きるのは意味論をしっかり考える時だ。 **に圏論が役立ったよ、圏論のおかげで**が理解できたよと言っている人は、 意識的にせよ無意識的にせよ、その**の意味論を考えてたのではないか。 それ自体は素晴らしいことだと思う。 でもそこまでの深い理解がなくても実用的なアプリは問題なく作れる。 因みに、バグを減らすのにも圏論の知識は必要ない。
- 131 名前:デフォルトの名無しさん [2020/03/30(月) 07:45:32.21 ID:b0eBXbnt.net]
- HaskellをやってるうちにHaskellの魅力に気づいて
Haskellで何かを作るよりもHaskellという言語自体のことをもっと深く知りたくなることもあるだろ そう言う場合に圏論は最良の選択だよ 俺としては、Haskellでアプリを作るためにはまあ圏論を知らなくてもいいと思うけど、 圏論を勉強すれば、より高い視点から見えるものもある 必須じゃないが、苦労して圏論を学んだボーナスだな
- 132 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 09:41:29 ID:rvpoYgUk.net]
- モナドがらみだとF#のコンピューテーション式使って
async定義されてるらしいな ちょっと、モナド凄いと思ってしまった 裏で共通作業をするって意味なら分からなくはないけど、 その仕掛けは気になる F# vNext は何が "ヤバい" のか: Monadic Programming の新時代 https://qiita.com/cannorin/items/1936faded610c3ab6c18
- 133 名前:デフォルトの名無しさん [2020/03/30(月) 18:05:04.07 ID:Dztwglzx.net]
- 型クラスとインターフェースがなんとなく似てるので、
型クラスのようなことをインターフェースでまねしようとしてなんか違う…ってなってたけど、やっとなぜなのかわかった インターフェース(クラスポリモーフィズム)って、そもそも型クラスとは全く別物で、むしろ存在型の一例になってるだな やっぱり型クラスは型クラスで、型クラスのない言語でこ対応物なんてなかったんや
- 134 名前:デフォルトの名無しさん mailto:sage [2020/03/30(月) 21:57:05.25 ID:6PZKu5o5.net]
- このゲームAIのコンテストにHaskellで参加して優勝してHaskellの強さを見せつけてやれ!
https://www.codingame.com/contests/ocean-of-code/leaderboard/global?column=LANGUAGE&value=Haskell
- 135 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 00:52:19 ID:K6rzEVwz.net]
- ハスケラが目的のあるプログラミングなんてやるわけないじゃん
- 136 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 11:43:52.10 ID:0EnDwwx5.net]
- 目的はお金でも知識でもいいよ
例えばお金自体が目的だったらそのお金が無駄に多過ぎるんじゃないかとか心配する必要はない
- 137 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 13:19:45 ID:OTxurRkT.net]
- お金、知識でもいいけど
たいていは俺すげーしたいだけだから問題。
- 138 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 13:55:00.32 ID:0EnDwwx5.net]
- 事前に目的を決めても「俺すげーしたいだけ」とかいう真の目的が後から出てくる
事前に嘘をついていたことか問題だと思えば沈黙が正解 だが隠し事をしていたことが問題だと思えば沈黙は悪 黙っているくらいなら嘘でも何か言った方がマシと思ってますます嘘が増える
- 139 名前:デフォルトの名無しさん [2020/03/31(火) 18:03:32.10 ID:pMTrfgV+.net]
- 存在しない敵に吠え続ける
- 140 名前:デフォルトの名無しさん [2020/03/31(火) 18:05:52.76 ID:j91gJgzW.net]
- >>135
学歴コンプやばそう
- 141 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 21:38:58 ID:OTxurRkT.net]
- だから金だろうと知識だろうと、学歴だろうとなんでもいいんだよ。
糞みたいなプライドで開発の邪魔しなけりゃな。
- 142 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 23:05:18 ID:gNdJtX6R.net]
- 学歴だろうと知識だろうと仕事の腕前だろうと、
お前らキモオタクがそういう承認欲求を満たそうとすると裏目に出るだけだぞ 表ではお世辞であしらわれて、裏ではチョロいとナメられるのがオチ
- 143 名前:デフォルトの名無しさん mailto:sage [2020/03/31(火) 23:24:14 .net]
- トンデモを惹きつけてしまうのは Haskell の業
アイドルにストーカーがついてまわるのと抽象的構造が似ている Haskell は高度知的アイドル型言語
- 144 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 02:53:00.79 ID:Bo1VBV+d.net]
- 確かにこのスレは厄介に粘着されてるしアイドルっぽい
- 145 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 02:57:48.54 ID:nmdW+DZF.net]
- 地下アイドルの宿命だろう
- 146 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 11:45:02 ID:BVkSt5Rw.net]
- 確かにここは地下アイドルスレみたいだな
- 147 名前:デフォルトの名無しさん [2020/04/01(水) 13:27:17.06 ID:0siDwK7Q.net]
- simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0 UIライブラリ (C#, 2D) を作ったよ ttp://x0000.net/topic.aspx?id=3688-0 学術巨大掲示板群: アルファ・ラボ ttp://x0000.net 物理学 化学 数学 生物学 天文学 地理地学 IT 電子 工学 国語 方言 言語学 など
- 148 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 18:26:51 ID:mH5B7GLX.net]
- そういえばsinもcosも地上の人に粘着されてたのを思い出した
- 149 名前:デフォルトの名無しさん mailto:sage [2020/04/01(水) 19:36:45.58 ID:MGV55WuQz]
- %stack_root%\global-project\stack.yaml
に resolver: lts-13.25 と記述があるんですが、 stack new 〜〜 すると作成されるプロジェクトの stack.yamlに resolver: lts-15.6 と記述されます。 global-projectの設定が反映されると思っていたんですが認識間違っていますでしょうか
- 150 名前:デフォルトの名無しさん mailto:sage [2020/04/02(木) 01:11:13.45 ID:I8hlhwK7.net]
- 対偶と逆の区別もついてなさげな人の登場
- 151 名前:デフォルトの名無しさん [2020/04/02(木) 01:48:53 ID:l/tHPd/2.net]
- Haskellって技術書少ないよな
みんな何で勉強してんの?
- 152 名前:デフォルトの名無しさん mailto:sage [2020/04/02(木) 05:42:29.80 ID:RR8wjO3M.net]
- >>149
マイナー言語の割には多いと思うけど。 人気ランクが上のkotlinやclojure、elmは少ないし、同じぐらいの順位のprologやsmalltalkは新刊が出てなくて、昔出た書籍のほとんどが絶版している。
- 153 名前:デフォルトの名無しさん mailto:sage [2020/04/02(木) 06:21:32.55 ID:RR8wjO3M.net]
- 技術書は英語圏の次に多いと思う。
- 154 名前:デフォルトの名無しさん mailto:sage [2020/04/02(木) 06:33:57.84 ID:6/i0fPdP.net]
- >>149
特別なことはなく、ネットや本で学んだよ 例えば ・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によるアプリ制作においてさっきのが戦略とすれば、こっちは戦術 okmij.org/ftp/Haskell/extensible/exteff.pdf ライブラリもいくつかある あと、Redditの投稿を追いかけていれば色々学べる https://www.reddit.com/r/haskell/ と言うか、紹介しきれないほどの情報がネットに溢れているんだが
- 155 名前:デフォルトの名無しさん mailto:sage [2020/04/02(木) 15:08:36.64 ID:ttPPzFzn.net]
- 情報収集のスキルは人それぞれでしょ
reddit はニッチなライブラリの質問とかリリース情報みたいなの多くね? かったるくていちいち追ってられない 俺はそういうのは twitter にいる Haskell 賢人に任せている これ面白いよ!って記事をフィルタして共有してくれるから、それ読んで勉強してる ありがたや ありがたや
- 156 名前:デフォルトの名無しさん mailto:sage [2020/04/02(木) 20:27:07.35 ID:te9iYBJx.net]
- >>152
有益
- 157 名前:デフォルトの名無しさん [2020/04/03(金) 02:49:35 ID:y19+kh0E.net]
- >>151
日本語の書籍の事だろ? それは先ずない ロシアが次点あとはドイツなんかも結構あるドイツは翻訳ばっかだが(´・ω・`)
- 158 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 07:10:48.62 ID:SDolupu6.net]
- 技術書って入門書も含む?
- 159 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 07:55:31 ID:a6cZ/qJ8.net]
- 一切含まない
- 160 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 08:28:58 ID:m8zbpAqS.net]
- おいおい
- 161 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 09:31:03 ID:DM1ooV3Z.net]
- >>155
日本以外にも翻訳文化はあるのね。 有名なのが翻訳されるのはわかるけど。
- 162 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 16:45:57.10 ID:ked6xspS.net]
- 日本の翻訳文化って外国語を自国語に取り込んじゃうのがすごいとかなんとかって話で、翻訳量自体は別にそれほどでもなかった気がする
- 163 名前:デフォルトの名無しさん [2020/04/03(金) 17:43:30 ID:VVxcL9Mv.net]
- オーバーシュートω
ロックダウンωωω
- 164 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 17:47:56 ID:JepZACIl.net]
- マジレスすると多分中国語が英語の次だろうな
場合によっちゃ英語より多いかもしれん 中国語の場合は入ってくるだけで出ていかないブラックホールだから実態が掴みにくい
- 165 名前:デフォルトの名無しさん [2020/04/03(金) 17:57:20.01 ID:VVxcL9Mv.net]
- twitterでHaskellを薦められたので本気になった
https://www.si-ght.jp/entry/techandme-chiyoda02
- 166 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 18:00:08.86 ID:AMwYpRxM.net]
- かわいいです
- 167 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 18:57:42 ID:Yw161NPN.net]
- はーい先生怒らないから犯人は正直に手を挙げなさい
>「プログラミング初心者なんですけど、何からやったらいいですか? > 最近ようやくJavaScriptが少しだけ読めるようになってきた頃です」。 > > そうしたら「JavaScriptなんて暗黒で恐ろしい言語はダメだ、純粋関数型言語であるHaskellからやった方がいい」みたいなことを言われました。 https://codezine.jp/article/detail/11885 > 「わからなかったけど、コードを書いて動かす楽しみと快感を覚えたんですよ。 > Haskellをもっと理解したいと相談したら、『圏論の基礎』という本を勧められました。 > でもその本も全然わからなかったんです(笑)」
- 168 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 19:05:03 ID:AMwYpRxM.net]
- 犯人オタクキモすぎてわろ
- 169 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 20:09:26 ID:Yw161NPN.net]
- 初手マックレーンは草 ...ってか鬼畜
もっとこう RealWorldHaskell とかあるでしょ
- 170 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 20:11:51 ID:Yw161NPN.net]
- >>164
エンジニアの容姿を判定するのは無しだろうよ... なんだ Haskell は、高潔なのは言語仕様だけか?
- 171 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 22:34:37 ID:pfIiNzTY.net]
- Haskellってかわいいよね
- 172 名前:デフォルトの名無しさん mailto:sage [2020/04/03(金) 23:04:02 ID:a6cZ/qJ8.net]
- 口うるさいBBAのイメージ
- 173 名前:デフォルトの名無しさん [2020/04/03(金) 23:36:38.26 ID:Wo72KAYJ.net]
- 学術的に進化してもらって
実用的な部分をメジャー言語が取り込んでくれればおk
- 174 名前:デフォルトの名無しさん [2020/04/04(土) 00:13:54.60 ID:HfszwI8c.net]
- >>152
>例えば テンプレ入
- 175 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 08:53:29.14 ID:S6De3LG2.net]
- >>168
haskellをチョイスするのが只のミーハーではない。
- 176 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 14:52:35.68 ID:ym7hUMuJ.net]
- むしろミーハーでもなんでも構わんのだけど、いち Haskeller が女性ってだけで
容姿を蔑んだり・持ち上げたりする連中がいるなら――もしいるのなら反省してほしい、と思った。 DSL を Freeモナドにするか、Tagless Final にするか、それぞれのメリットはなにか… Haskeller はそういうことで悩んでいたいのであって、性別とかを理由に余計な荷物を背負わせるべきじゃない。 (ghc も依存している llvm はそういう辛さを避ける為に行動規範を定めているんだけど、いまのところまだ ghc には無いっぽい) https://llvm.org/docs/CodeOfConduct.html
- 177 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 14:56:51.64 ID:ym7hUMuJ.net]
- >>170
個人的な Haskell のイメージは、なんかシュッとした紳士みたいな感じ エラーメッセージは確かに、ともすると口うるさいw
- 178 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 15:03:44.40 ID:ZRwDcP1M.net]
- キモすぎて怖い…
- 179 名前:デフォルトの名無しさん mailto:sage [2020/04/04(土) 17:30:47.61 ID:V7kxF8pu.net]
- haskellでやり過ぎなほど徹底的に宣言性にこだわってプログラムする実験をしてみたが、なかなか面白いぞ。
手続き的になりがちなゲームプログラミングでやってみると特に。
- 180 名前:デフォルトの名無しさん [2020/04/04(土) 20:17:31.82 ID:H4c+c10U.net]
- 今から出会い系の女と会ってくるがやばいんか?
- 181 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 00:47:08 .net]
- Haskellスレってワードサラダbotに荒らされてるのか
- 182 名前:デフォルトの名無しさん [2020/04/05(日) 12:14:43.03 ID:P07lI1PF.net]
- ちょまど洗脳されかけたんか
https://www.youtube.com/watch?v=v56Y7TJ1ih8 https://yoshiakikamiya.com/characteristics-of-new-employee-training-conducted-by-black-companies/ jibun-discovery.com/?p=1691
- 183 名前:デフォルトの名無しさん [2020/04/05(日) 12:26:37 ID:P07lI1PF.net]
- >>178
感染がやばい https://startyourenginebrrrrr.net/?p=1339 お気を付けて
- 184 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 14:11:08 ID:TA9KtVo9.net]
- haskellでアクションって言葉よく出てくるけど定義なに?
- 185 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 14:28:05 ID:k4Q+DqWZ.net]
- >>182
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
- 186 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 19:12:11 ID:690ELyL1.net]
- >>177
レポジトリ教えて
- 187 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 20:19:22 ID:eydcY4ib.net]
- レポジトリって、サッポロ一番の新しい味?
- 188 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 20:26:40 ID:glUSLxyq.net]
- そうだよ
- 189 名前:デフォルトの名無しさん mailto:sage [2020/04/05(日) 21:28:22 ID:BHv6uIvk.net]
- レポジトレ教えて
- 190 名前:デフォルトの名無しさん mailto:sage [2020/04/06(月) 02:32:17.14 .net]
- FRPは死滅しちゃったの?
- 191 名前:デフォルトの名無しさん mailto:sage [2020/04/06(月) 03:19:32.28 ID:2h0eofxY.net]
- >>188
どういうこと?
- 192 名前:デフォルトの名無しさん mailto:sage [2020/04/06(月) 04:59:07 ID:qqlpdYMz.net]
- どういうことなの…
- 193 名前:デフォルトの名無しさん mailto:sage [2020/04/06(月) 05:06:41.75 ID:kxm5p/Vo.net]
- むしろ>>189-190がどういうことなのかわからない
- 194 名前:デフォルトの名無しさん [2020/04/06(月) 09:29:24 ID:H7siEM1Y.net]
- CabalのドキュメントのSecure repository のところ、
root.jsonのkey idを省略するのはお勧めしないとか書いてるけど、 なにかしないといけないの?
- 195 名前:デフォルトの名無しさん mailto:sage [2020/04/06(月) 22:36:41.14 ID:MPGLY2yf.net]
- このスレにはHaskellerなんかいないということがよくわかるな
- 196 名前:デフォルトの名無しさん mailto:sage [2020/04/07(火) 07:33:13 ID:UmG0jYGu.net]
- 本当に言語に詳しい奴ってのはその言語の弱点をしっかりおさえてるもんよ。
- 197 名前:デフォルトの名無しさん [2020/04/07(火) 07:36:16 ID:SJ9J2Mim.net]
- ?
- 198 名前:デフォルトの名無しさん mailto:sage [2020/04/08(水) 08:37:32 .net]
- IO がオルタナティヴになったのって最近なのか
Aizu Online Judge のGHCだとコンパイルエラーになる
- 199 名前:デフォルトの名無しさん mailto:sage [2020/04/08(水) 22:07:27 .net]
- let [a,b,c,d] = bokunofunction in 〜
このリストってWHNFにならないのな
- 200 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 14:46:14.07 ID:qLx35nn/.net]
- 目的は二つ
式を評価し過ぎないこと 副作用を実行し過ぎないこと 手段はただ一つ 最外簡約
- 201 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 18:21:55 ID:flKXD0mo.net]
- haskellでコロナ感染シミュ作るやつ誰もおらんのか?
- 202 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 19:41:52 ID:EEQhx4+u.net]
- codewarの問題をHaskellで解いてみてるんだけど
、12000msタイムアウト多発する リスト内包表記とか再帰はHaskellerはあんまり使わないの? nに含まれる素因数とかすぐタイムアウトする
- 203 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 21:46:48 ID:ogEgOOCw.net]
- >>200
arithmoiとかのライブラリ使うとめっちゃ速いよ ソースを見てみるといいかも あと、prime factorization haskell とかをキーワードにして検索してみるとか
- 204 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 22:42:42.81 .net]
- Haskell で競プロ辛い・・・
200000個の整数読み込んで処理するような問題だとMLEになりがちだ 本当にそんなに使ってるのかよ・・・疑わしいなぁ ランタイムがとりあえずあるだけ使おうとして、足りなくなったらもう要らない空間を探して、そこに上書きするようにしてるの? だとすると、とりあえずあるだけ使おう期間の段階で上限ぶっちぎってるってことかね もしかして GHC「記憶域ください」 競プロシステム「あなたは上限なのでもうあげません」 GHC「仕方ないな、じゃあガベージコレクションしてなんとかやりくりしよう」 ではなくて GHC「記憶域ください」 競プロシステム「どうぞどうぞ」 GHC「どうも」 競プロシステム「はいそれは毒まんじゅうです。今のでMLEです」 GHC「えっ!!!!」 こうなんじゃないか? ソースコードで「メモリ使用はは150MB以内で巧くやりくりしろ」とかって制限の指示できないんですか?
- 205 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 23:16:24.10 ID:DjxEmd7z.net]
- Haskellで競プロやるテクをまとめた同人誌があったような
- 206 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 23:19:22.76 ID:BXIcY8lZ.net]
- 薄い本があったのか…
- 207 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 04:15:51.10 ID:WjwyibsT.net]
- mleってなに?
Maximum likelihood estimation しか思いつかん
- 208 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 06:08:11.82 ID:Er/sUT94.net]
- ぼくもそれしか…
- 209 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 06:56:02.05 ID:rnoGia+U.net]
- 競プロ mle でググってみた
MLE メモリリミットエラー(Memory Limit Error)の略 提出したプログラムが許可された以上のメモリを使用したときに出る (一部のコンテストで採用されている表現)
- 210 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 12:33:53 ID:tr0y4100.net]
- >>202
とりあえずローカルでプロファイル取って実行してみると スペースリークや大量のGCの原因が推定できるはず (「Haskell プロファイラ」とかでぐぐって) 未評価のサンクが大量に積み上がっているとか、 イミュータブルな連結リストの使い方が悪くて 大量の一時リストを作ってしまっているとか あたりじゃないかと想像してみる
- 211 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 13:06:48.82 ID:pEw+DEbK.net]
- タイムアウトのやつ
この問題やってて 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で言うと値コピーしてソートしないでポインタでソートすると速いみたいな
- 212 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 21:38:04.55 ID:tr0y4100.net]
- >>209
どう改善すればいいかはすぐにはわからないが prime_factors関数は末尾再帰ではない再帰をしているから容易にスペースリークしそうな感じはする
- 213 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 00:39:23 .net]
- できるだけリストを避けて
読み込みもByteString 版 getContents と readInt の組み合わせで高速化 そして困ったときの Data.Sequence 様やで! C系提出者は軒並み 0.1 s で処理を終えている中、220MB 1.9 s 弱かけてなんとか致命傷でかいくぐった 制限超過してる気がするが、マイナー言語へのアファーマティブアクションかな? くぅ〜疲れましたw これにて AC です!
- 214 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 01:34:33 .net]
- >>209
prime_factorsだけど quotRem なら一回で両方得られる 探索は3から+2ずつ探すべき n が√m を超えてしまったら探索を打ち切るべき リストの整数全部に出てくる素因数を予めリストアップしたいんだろうけど そのprime_factorsだと絶対に素因数が存在しない、(2を除く)偶数空間と√mの後の空間をmに達するまで探していてとてもとても無駄 この無駄はmが大きいほど酷いことになるが、見事に君のコードはproductなんてしてmを巨大化させている 例えば、1000000 の素因数は少なくとも1000 以降は存在しないのに1001, 1002, 1003, ... , 999998, 999999, 1000000 まで探すところを想像してみて 一目気づいたのはそんなところかね。先ずはそこを直してから一局といったところか
- 215 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 01:52:08 .net]
- >>208
まあ最終手段はそうなるんでしょうね しかし早すぎる段階での最適化はたいてい悪手って言われてるし その前に、アルゴリズムの選定が間違ってるんではとなって、あれこれ作戦変えて いつしか通るわけです。すると結局いつまで経ってもプロファイリングを練習する機会が来ないんですよね
- 216 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 01:54:06 .net]
- あ、いや、あれこれ作戦変えるヒントを得る為にプロファイリングするのか・・・
やっぱり手を出してみるか
- 217 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 10:48:29 ID:Ez55nAck.net]
- 異世界人「アルゴリズムをあれこれ変える」
主人公「言語をあれこれ変えてみよう」
- 218 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 11:07:53 ID:aAi/G6aw.net]
- 時間とメモリ両面のcomplexity考えるのは最適化以前の話
- 219 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 17:46:40 ID:/WUIZ9Nz.net]
- >>212
39の素因数って3,13よね? √39が6くらいだから探索区間は√mじゃ不十分かなって でも確かに偶数はいらないから2:[3,5..]でいいね 全部の素因数のリスト作るのに全部掛け合わせて処理はひどいなと見直して思った リストは早くするなら使わない方針なのね Quatremとリスト以外(sequenceが代替?)調べて組み込んでみようかな
- 220 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 17:47:28 ID:/WUIZ9Nz.net]
- お礼書き忘れたすみません
回答ありがとうござ
- 221 名前:「ますなんとか通ってもらいます []
- [ここ壊れてます]
- 222 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 19:54:09 ID:JKZ0KcR7.net]
- >>217
なんの話かよく知らないけど39を素因数分解してるのなら、 約数として3が見つかったら、その時点でもう39が素数じゃないことが判明するから、13を調べる必要ないよ √39以下の数字調べればオッケー
- 223 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 19:55:22 ID:JKZ0KcR7.net]
- 間違えた
「素因数分解してるのなら」じゃなくて「素数判定してるのなら」だった
|

|