20/03/28 12:53:14 6h+JM2Gw.net
>>101
「ついてこれないならついてこなくていい」スタイルもどうかと思うぞ
そんなんやってたら、いずれ砂漠になっちまう
ただでさえスレッドが一週間止まるなんてざらにある現状なのに
>>100
> 副作用があろうとなかろうと、関連が深い処理をまとめて記述する手続き型の方が使いやすい
Haskell はモナドの do 構文を通して手続きをサポートする。手続き型言語でもある
副作用の有無に関わらず処理をモジュールにまとめることはできる
むしろ入出力が型に明に表れるので通信的凝集などの高凝集なモジュール分けに自然になりやすい
ただそれと引き換えに、ラフに、スケッチ的にプログラミングするのがやりにくい
これは原理的なトレードオフではないと思うが、少なくとも現時点ではそうだ
113:デフォルトの名無しさん
20/03/28 13:03:17 6h+JM2Gw.net
>>109
(雑種って言い方がすでに汚ねぇ)
人種にするみたいに、思想に文句をつけてるわけじゃなくてだな…
プログラマー全体の仕事の総量は増えてるってことを批判してる。非効率
114:デフォルトの名無しさん
20/03/28 13:20:53.69 O2QL6TTJ.net
>>107
悟り派はそんな面倒なことしません。
他の言語に移るだけです。
115:デフォルトの名無しさん
20/03/28 13:39:06.65 6h+JM2Gw.net
>>112
そんな面倒なこと?
Haskell風ライブラリを作ることか? それとも最初からHaskellでやること?
後者だとすれば何がボトルネックになっているのか
116:デフォルトの名無しさん
20/03/28 13:51:46.86 HVNiklPA.net
言語仕様はよいよね
実装はどこがよいのかさっぱりわからんが、知らなくても問題ないと言われる
117:デフォルトの名無しさん
20/03/28 14:01:08.48 sKmY04JT.net
なら、F#でいいと思います。
副作用もあるし、コンピューテーション式もあるよ。
118:デフォルトの名無しさん
20/03/28 14:02:43.23 6h+JM2Gw.net
>>114
どこが悪いのかも同じようにわからない、って解釈でいいかな
119:デフォルトの名無しさん
20/03/28 14:06:58.93 6h+JM2Gw.net
>>115
ふむ、それらがあった方が Haskell よりも良い―その理由を説明してほしい
Haskell サイドに取り入れられるかもしれない
120:デフォルトの名無しさん
20/03/28 14:08:13.75 qGbN9Cxf.net
なんかギルガメッシュいてワロタ
雑種!!!
121:デフォルトの名無しさん
20/03/28 14:18:52 6h+JM2Gw.net
>>118
突然妙なことを言い出したので、釣られて笑ってしまった
ギルガメッシュってなに?
122:デフォルトの名無しさん
20/03/29 20:36:56 +/sFre8I.net
Haskellの仕様=ゲートオブバビロンかよ
123:デフォルトの名無しさん
20/03/29 21:28:27.32 AoSt3bhf.net
Haskellの理解に圏論は必要ないとよく言われるけど、
End/Coend勉強したらHaskellのポリモーフィズムとか
存在型のことがよくわかったし、
コモナドとか余代数は圏論的理解しといた方が絶対にいいなと思った
今はKan拡張に挑戦中だわ
124:デフォルトの名無しさん
20/03/29 21:37:39.83 i8zPSo78.net
なにで勉強してるの?
125:デフォルトの名無しさん
20/03/29 21:42:16.37 dETyGOxM.net
>>121
理解が何を指しているかによる
haskellでwebアプリやゲームを作ることができる
というのが理解の指標なら、圏論は知らなくてもいい
126:デフォルトの名無しさん
20/03/29 21:46:33.53 AoSt3bhf.net
>>123
ekmettのライブラリとかHaskellの型システムを強化する言語拡張など、高度に抽象的なコンストラクションがどういう意図で作られていてどういう場面で役に立つのか
127:デフォルトの名無しさん
20/03/30 04:34:10 BWxPCUH7.net
>>121
うい。
知ってた方が良いけど、知らなくても使えはする。
むしろ最近はHaskellより圏論に興味が移ってる。
(Haskellやその他の言語はその理論の確認用)
128:デフォルトの名無しさん
20/03/30 04:43:23.39 BWxPCUH7.net
>>66
手続き型言語と数学の関連性が見える様になると、数学的に正しい=バグが無いプログラムを書けるようになる。
だったら数学(特に圏論)だけで良いんだけど、ほぼ数学なHaskellで実際に動かして手続き型言語と数学の共通点を確認出来る。
129:デフォルトの名無しさん
20/03/30 04:50:50.17 BWxPCUH7.net
モナドについてはDSLと言うのは言い得て妙で、mainはIO ()を得るために式を展開する。
その過程で副作用を含む式が動き出す。
個人的にはHaskellは副作用は有るが、参照透明性は崩れていないと言うのがHaskellが純粋関数型言語を主張する根拠なのだと思う。
130:デフォルトの名無しさん
20/03/30 05:26:16.39 RViSHasz.net
アプリを作ることに限れば、圏論の触り部分すら知らなくても問題ない。
C#やJava、Pythonは大して深く理解していない入門を抜けたばかりの人でも、
アドバイスを受けながら一通りアプリを完成させられるでしょ。
未知の必要なライブラリも本やドキュメントを読んで使い方を学べるでしょ。
haskellもまったく同じ。
入門を抜けたらすぐにアプリを作れる(し、そうすべきだと個人的には思う)。
そこに圏論の知識は微塵も要らない。
圏論の知識が活きるのは意味論をしっかり考える時だ。
**に圏論が役立ったよ、圏論のおかげで**が理解できたよと言っている人は、
意識的にせよ無意識的にせよ、その**の意味論を考えてたのではないか。
それ自体は素晴らしいことだと思う。
でもそこまでの深い理解がなくても実用的なアプリは問題なく作れる。
因みに、バグを減らすのにも圏論の知識は必要ない。
131:デフォルトの名無しさん
20/03/30 07:45:32.21 b0eBXbnt.net
HaskellをやってるうちにHaskellの魅力に気づいて
Haskellで何かを作るよりもHaskellという言語自体のことをもっと深く知りたくなることもあるだろ
そう言う場合に圏論は最良の選択だよ
俺としては、Haskellでアプリを作るためにはまあ圏論を知らなくてもいいと思うけど、
圏論を勉強すれば、より高い視点から見えるものもある
必須じゃないが、苦労して圏論を学んだボーナスだな
132:デフォルトの名無しさん
20/03/30 09:41:29 rvpoYgUk.net
モナドがらみだとF#のコンピューテーション式使って
async定義されてるらしいな ちょっと、モナド凄いと思ってしまった
裏で共通作業をするって意味なら分からなくはないけど、
その仕掛けは気になる
F# vNext は何が "ヤバい" のか: Monadic Programming の新時代
URLリンク(qiita.com)
133:デフォルトの名無しさん
20/03/30 18:05:04.07 Dztwglzx.net
型クラスとインターフェースがなんとなく似てるので、
型クラスのようなことをインターフェースでまねしようとしてなんか違う…ってなってたけど、やっとなぜなのかわかった
インターフェース(クラスポリモーフィズム)って、そもそも型クラスとは全く別物で、むしろ存在型の一例になってるだな
やっぱり型クラスは型クラスで、型クラスのない言語でこ対応物なんてなかったんや
134:デフォルトの名無しさん
20/03/30 21:57:05.25 6PZKu5o5.net
このゲームAIのコンテストにHaskellで参加して優勝してHaskellの強さを見せつけてやれ!
URLリンク(www.codingame.com)
135:デフォルトの名無しさん
20/03/31 00:52:19 K6rzEVwz.net
ハスケラが目的のあるプログラミングなんてやるわけないじゃん
136:デフォルトの名無しさん
20/03/31 11:43:52.10 0EnDwwx5.net
目的はお金でも知識でもいいよ
例えばお金自体が目的だったらそのお金が無駄に多過ぎるんじゃないかとか心配する必要はない
137:デフォルトの名無しさん
20/03/31 13:19:45 OTxurRkT.net
お金、知識でもいいけど
たいていは俺すげーしたいだけだから問題。
138:デフォルトの名無しさん
20/03/31 13:55:00.32 0EnDwwx5.net
事前に目的を決めても「俺すげーしたいだけ」とかいう真の目的が後から出てくる
事前に嘘をついていたことか問題だと思えば沈黙が正解
だが隠し事をしていたことが問題だと思えば沈黙は悪
黙っているくらいなら嘘でも何か言った方がマシと思ってますます嘘が増える
139:デフォルトの名無しさん
20/03/31 18:03:32.10 pMTrfgV+.net
存在しない敵に吠え続ける
140:デフォルトの名無しさん
20/03/31 18:05:52.76 j91gJgzW.net
>>135
学歴コンプやばそう
141:デフォルトの名無しさん
20/03/31 21:38:58 OTxurRkT.net
だから金だろうと知識だろうと、学歴だろうとなんでもいいんだよ。
糞みたいなプライドで開発の邪魔しなけりゃな。
142:デフォルトの名無しさん
20/03/31 23:05:18 gNdJtX6R.net
学歴だろうと知識だろうと仕事の腕前だろうと、
お前らキモオタクがそういう承認欲求を満たそうとすると裏目に出るだけだぞ
表ではお世辞であしらわれて、裏ではチョロいとナメられるのがオチ
143:デフォルトの名無しさん
20/03/31 23:24:14 .net
トンデモを惹きつけてしまうのは Haskell の業
アイドルにストーカーがついてまわるのと抽象的構造が似ている
Haskell は高度知的アイドル型言語
144:デフォルトの名無しさん
20/04/01 02:53:00.79 Bo1VBV+d.net
確かにこのスレは厄介に粘着されてるしアイドルっぽい
145:デフォルトの名無しさん
20/04/01 02:57:48.54 nmdW+DZF.net
地下アイドルの宿命だろう
146:デフォルトの名無しさん
20/04/01 11:45:02 BVkSt5Rw.net
確かにここは地下アイドルスレみたいだな
147:デフォルトの名無しさん
20/04/01 13:27:17.06 0siDwK7Q.net
simulationライブラリで純粋な関数式プログラミングをする
URLリンク(x0000.net)
UIライブラリ (C#, 2D) を作ったよ
URLリンク(x0000.net)
学術巨大掲示板群: アルファ・ラボ
URLリンク(x0000.net)
物理学 化学 数学 生物学 天文学 地理地学
IT 電子 工学 国語 方言 言語学 など
148:デフォルトの名無しさん
20/04/01 18:26:51 mH5B7GLX.net
そういえばsinもcosも地上の人に粘着されてたのを思い出した
149:デフォルトの名無しさん
20/04/01 19:36:45.58 MGV55WuQz
%stack_root%\global-project\stack.yaml
に
resolver: lts-13.25
と記述があるんですが、
stack new ~~
すると作成されるプロジェクトの
stack.yamlに
resolver: lts-15.6
と記述されます。
global-projectの設定が反映されると思っていたんですが認識間違っていますでしょうか
150:デフォルトの名無しさん
20/04/02 01:11:13.45 I8hlhwK7.net
対偶と逆の区別もついてなさげな人の登場
151:デフォルトの名無しさん
20/04/02 01:48:53 l/tHPd/2.net
Haskellって技術書少ないよな
みんな何で勉強してんの?
152:デフォルトの名無しさん
20/04/02 05:42:29.80 RR8wjO3M.net
>>149
マイナー言語の割には多いと思うけど。
人気ランクが上のkotlinやclojure、elmは少ないし、同じぐらいの順位のprologやsmalltalkは新刊が出てなくて、昔出た書籍のほとんどが絶版している。
153:デフォルトの名無しさん
20/04/02 06:21:32.55 RR8wjO3M.net
技術書は英語圏の次に多いと思う。
154:デフォルトの名無しさん
20/04/02 06:33:57.84 6/i0fPdP.net
>>149
特別なことはなく、ネットや本で学んだよ
例えば
・Thinking wih Types
型レベルプログラミングを学んだ
URLリンク(leanpub.com)
・Optics By Example
lensに代表されるopticsを学んだ
URLリンク(leanpub.com)
・Hexagonal architecture
Haskell & DDD でアプリを作るパターンの一つを学んだ
URLリンク(blog.ploeh.dk)
・Effect system
IOを安全に扱う方法を学んだ (正確にはモナドの合成を分かりやすく扱う方法)
DDDによるアプリ制作においてさっきのが戦略とすれば、こっちは戦術
URLリンク(okmij.org)
ライブラリもいくつかある
あと、Redditの投稿を追いかけていれば色々学べる
URLリンク(www.reddit.com)
と言うか、紹介しきれないほどの情報がネットに溢れているんだが
155:デフォルトの名無しさん
20/04/02 15:08:36.64 ttPPzFzn.net
情報収集のスキルは人それぞれでしょ
reddit はニッチなライブラリの質問とかリリース情報みたいなの多くね?
かったるくていちいち追ってられない
俺はそういうのは twitter にいる Haskell 賢人に任せている
これ面白いよ!って記事をフィルタして共有してくれるから、それ読んで勉強してる
ありがたや ありがたや
156:デフォルトの名無しさん
20/04/02 20:27:07.35 te9iYBJx.net
>>152
有益
157:デフォルトの名無しさん
20/04/03 02:49:35 y19+kh0E.net
>>151
日本語の書籍の事だろ?
それは先ずない
ロシアが次点あとはドイツなんかも結構あるドイツは翻訳ばっかだが(´・ω・`)
158:デフォルトの名無しさん
20/04/03 07:10:48.62 SDolupu6.net
技術書って入門書も含む?
159:デフォルトの名無しさん
20/04/03 07:55:31 a6cZ/qJ8.net
一切含まない
160:デフォルトの名無しさん
20/04/03 08:28:58 m8zbpAqS.net
おいおい
161:デフォルトの名無しさん
20/04/03 09:31:03 DM1ooV3Z.net
>>155
日本以外にも翻訳文化はあるのね。
有名なのが翻訳されるのはわかるけど。
162:デフォルトの名無しさん
20/04/03 16:45:57.10 ked6xspS.net
日本の翻訳文化って外国語を自国語に取り込んじゃうのがすごいとかなんとかって話で、翻訳量自体は別にそれほどでもなかった気がする
163:デフォルトの名無しさん
20/04/03 17:43:30 VVxcL9Mv.net
オーバーシュートω
ロックダウンωωω
164:デフォルトの名無しさん
20/04/03 17:47:56 JepZACIl.net
マジレスすると多分中国語が英語の次だろうな
場合によっちゃ英語より多いかもしれん
中国語の場合は入ってくるだけで出ていかないブラックホールだから実態が掴みにくい
165:デフォルトの名無しさん
20/04/03 17:57:20.01 VVxcL9Mv.net
twitterでHaskellを薦められたので本気になった
URLリンク(www.si-ght.jp)
166:デフォルトの名無しさん
20/04/03 18:00:08.86 AMwYpRxM.net
かわいいです
167:デフォルトの名無しさん
20/04/03 18:57:42 Yw161NPN.net
はーい先生怒らないから犯人は正直に手を挙げなさい
>「プログラミング初心者なんですけど、何からやったらいいですか?
> 最近ようやくJavaScriptが少しだけ読めるようになってきた頃です」。
>
> そうしたら「JavaScriptなんて暗黒で恐ろしい言語はダメだ、純粋関数型言語であるHaskellからやった方がいい」みたいなことを言われました。
URLリンク(codezine.jp)
> 「わからなかったけど、コードを書いて動かす楽しみと快感を覚えたんですよ。
> Haskellをもっと理解したいと相談したら、『圏論の基礎』という本を勧められました。
> でもその本も全然わからなかったんです(笑)」
168:デフォルトの名無しさん
20/04/03 19:05:03 AMwYpRxM.net
犯人オタクキモすぎてわろ
169:デフォルトの名無しさん
20/04/03 20:09:26 Yw161NPN.net
初手マックレーンは草 ...ってか鬼畜
もっとこう RealWorldHaskell とかあるでしょ
170:デフォルトの名無しさん
20/04/03 20:11:51 Yw161NPN.net
>>164
エンジニアの容姿を判定するのは無しだろうよ...
なんだ Haskell は、高潔なのは言語仕様だけか?
171:デフォルトの名無しさん
20/04/03 22:34:37 pfIiNzTY.net
Haskellってかわいいよね
172:デフォルトの名無しさん
20/04/03 23:04:02 a6cZ/qJ8.net
口うるさいBBAのイメージ
173:デフォルトの名無しさん
20/04/03 23:36:38.26 Wo72KAYJ.net
学術的に進化してもらって
実用的な部分をメジャー言語が取り込んでくれればおk
174:デフォルトの名無しさん
20/04/04 00:13:54.60 HfszwI8c.net
>>152
>例えば
テンプレ入
175:デフォルトの名無しさん
20/04/04 08:53:29.14 S6De3LG2.net
>>168
haskellをチョイスするのが只のミーハーではない。
176:デフォルトの名無しさん
20/04/04 14:52:35.68 ym7hUMuJ.net
むしろミーハーでもなんでも構わんのだけど、いち Haskeller が女性ってだけで
容姿を蔑んだり・持ち上げたりする連中がいるなら―もしいるのなら反省してほしい、と思った。
DSL を Freeモナドにするか、Tagless Final にするか、それぞれのメリットはなにか…
Haskeller はそういうことで悩んでいたいのであって、性別とかを理由に余計な荷物を背負わせるべきじゃない。
(ghc も依存している llvm はそういう辛さを避ける為に行動規範を定めているんだけど、いまのところまだ ghc には無いっぽい)
URLリンク(llvm.org)
177:デフォルトの名無しさん
20/04/04 14:56:51.64 ym7hUMuJ.net
>>170
個人的な Haskell のイメージは、なんかシュッとした紳士みたいな感じ
エラーメッセージは確かに、ともすると口うるさいw
178:デフォルトの名無しさん
20/04/04 15:03:44.40 ZRwDcP1M.net
キモすぎて怖い…
179:デフォルトの名無しさん
20/04/04 17:30:47.61 V7kxF8pu.net
haskellでやり過ぎなほど徹底的に宣言性にこだわってプログラムする実験をしてみたが、なかなか面白いぞ。
手続き的になりがちなゲームプログラミングでやってみると特に。
180:デフォルトの名無しさん
20/04/04 20:17:31.82 H4c+c10U.net
今から出会い系の女と会ってくるがやばいんか?
181:デフォルトの名無しさん
20/04/05 00:47:08 .net
Haskellスレってワードサラダbotに荒らされてるのか
182:デフォルトの名無しさん
20/04/05 12:14:43.03 P07lI1PF.net
ちょまど洗脳されかけたんか
URLリンク(www.youtube.com)
URLリンク(yoshiakikamiya.com)
URLリンク(jibun-discovery.com)
183:デフォルトの名無しさん
20/04/05 12:26:37 P07lI1PF.net
>>178
感染がやばい
URLリンク(startyourenginebrrrrr.net)
お気を付けて
184:デフォルトの名無しさん
20/04/05 14:11:08 TA9KtVo9.net
haskellでアクションって言葉よく出てくるけど定義なに?
185:デフォルトの名無しさん
20/04/05 14:28:05 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:デフォルトの名無しさん
20/04/05 19:12:11 690ELyL1.net
>>177
レポジトリ教えて
187:デフォルトの名無しさん
20/04/05 20:19:22 eydcY4ib.net
レポジトリって、サッポロ一番の新しい味?
188:デフォルトの名無しさん
20/04/05 20:26:40 glUSLxyq.net
そうだよ
189:デフォルトの名無しさん
20/04/05 21:28:22 BHv6uIvk.net
レポジトレ教えて
190:デフォルトの名無しさん
20/04/06 02:32:17.14 .net
FRPは死滅しちゃったの?
191:デフォルトの名無しさん
20/04/06 03:19:32.28 2h0eofxY.net
>>188
どういうこと?
192:デフォルトの名無しさん
20/04/06 04:59:07 qqlpdYMz.net
どういうことなの…
193:デフォルトの名無しさん
20/04/06 05:06:41.75 kxm5p/Vo.net
むしろ>>189-190がどういうことなのかわからない
194:デフォルトの名無しさん
20/04/06 09:29:24 H7siEM1Y.net
CabalのドキュメントのSecure repository のところ、
root.jsonのkey idを省略するのはお勧めしないとか書いてるけど、
なにかしないといけないの?
195:デフォルトの名無しさん
20/04/06 22:36:41.14 MPGLY2yf.net
このスレにはHaskellerなんかいないということがよくわかるな
196:デフォルトの名無しさん
20/04/07 07:33:13 UmG0jYGu.net
本当に言語に詳しい奴ってのはその言語の弱点をしっかりおさえてるもんよ。
197:デフォルトの名無しさん
20/04/07 07:36:16 SJ9J2Mim.net
?
198:デフォルトの名無しさん
20/04/08 08:37:32 .net
IO がオルタナティヴになったのって最近なのか
Aizu Online Judge のGHCだとコンパイルエラーになる
199:デフォルトの名無しさん
20/04/08 22:07:27 .net
let [a,b,c,d] = bokunofunction in ~
このリストってWHNFにならないのな
200:デフォルトの名無しさん
20/04/12 14:46:14.07 qLx35nn/.net
目的は二つ
式を評価し過ぎないこと
副作用を実行し過ぎないこと
手段はただ一つ
最外簡約
201:デフォルトの名無しさん
20/04/12 18:21:55 flKXD0mo.net
haskellでコロナ感染シミュ作るやつ誰もおらんのか?
202:デフォルトの名無しさん
20/04/12 19:41:52 EEQhx4+u.net
codewarの問題をHaskellで解いてみてるんだけど
、12000msタイムアウト多発する
リスト内包表記とか再帰はHaskellerはあんまり使わないの?
nに含まれる素因数とかすぐタイムアウトする
203:デフォルトの名無しさん
20/04/12 21:46:48 ogEgOOCw.net
>>200
arithmoiとかのライブラリ使うとめっちゃ速いよ
ソースを見てみるといいかも
あと、prime factorization haskell
とかをキーワードにして検索してみるとか
204:デフォルトの名無しさん
20/04/12 22:42:42.81 .net
Haskell で競プロ辛い・・・
200000個の整数読み込んで処理するような問題だとMLEになりがちだ
本当にそんなに使ってるのかよ・・・疑わしいなぁ
ランタイムがとりあえずあるだけ使おうとして、足りなくなったらもう要らない空間を探して、そこに上書きするようにしてるの?
だとすると、とりあえずあるだけ使おう期間の段階で上限ぶっちぎってるってことかね
もしかして
GHC「記憶域ください」
競プロシステム「あなたは上限なのでもうあげません」
GHC「仕方ないな、じゃあガベージコレクションしてなんとかやりくりしよう」
ではなくて
GHC「記憶域ください」
競プロシステム「どうぞどうぞ」
GHC「どうも」
競プロシステム「はいそれは毒まんじゅうです。今のでMLEです」
GHC「えっ!!!!」
こうなんじゃないか?
ソースコードで「メモリ使用はは150MB以内で巧くやりくりしろ」とかって制限の指示できないんですか?
205:デフォルトの名無しさん
20/04/12 23:16:24.10 DjxEmd7z.net
Haskellで競プロやるテクをまとめた同人誌があったような
206:デフォルトの名無しさん
20/04/12 23:19:22.76 BXIcY8lZ.net
薄い本があったのか…
207:デフォルトの名無しさん
20/04/13 04:15:51.10 WjwyibsT.net
mleってなに?
Maximum likelihood estimation しか思いつかん
208:デフォルトの名無しさん
20/04/13 06:08:11.82 Er/sUT94.net
ぼくもそれしか…
209:デフォルトの名無しさん
20/04/13 06:56:02.05 rnoGia+U.net
競プロ mle でググってみた
MLE
メモリリミットエラー(Memory Limit Error)の略
提出したプログラムが許可された以上のメモリを使用したときに出る
(一部のコンテストで採用されている表現)
210:デフォルトの名無しさん
20/04/13 12:33:53 tr0y4100.net
>>202
とりあえずローカルでプロファイル取って実行してみると
スペースリークや大量のGCの原因が推定できるはず
(「Haskell プロファイラ」とかでぐぐって)
未評価のサンクが大量に積み上がっているとか、
イミュータブルな連結リストの使い方が悪くて
大量の一時リストを作ってしまっているとか
あたりじゃないかと想像してみる
211:デフォルトの名無しさん
20/04/13 13:06:48.82 pEw+DEbK.net
タイムアウトのやつ
この問題やってて
URLリンク(www.codewars.com)
通らないコードがこれ
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:デフォルトの名無しさん
20/04/13 21:38:04.55 tr0y4100.net
>>209
どう改善すればいいかはすぐにはわからないが
prime_factors関数は末尾再帰ではない再帰をしているから容易にスペースリークしそうな感じはする
213:デフォルトの名無しさん
20/04/14 00:39:23 .net
できるだけリストを避けて
読み込みもByteString 版 getContents と readInt の組み合わせで高速化
そして困ったときの Data.Sequence 様やで!
C系提出者は軒並み 0.1 s で処理を終えている中、220MB 1.9 s 弱かけてなんとか致命傷でかいくぐった
制限超過してる気がするが、マイナー言語へのアファーマティブアクションかな?
くぅ~疲れましたw これにて AC です!
214:デフォルトの名無しさん
20/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:デフォルトの名無しさん
20/04/14 01:52:08 .net
>>208
まあ最終手段はそうなるんでしょうね
しかし早すぎる段階での最適化はたいてい悪手って言われてるし
その前に、アルゴリズムの選定が間違ってるんではとなって、あれこれ作戦変えて
いつしか通るわけです。すると結局いつまで経ってもプロファイリングを練習する機会が来ないんですよね
216:デフォルトの名無しさん
20/04/14 01:54:06 .net
あ、いや、あれこれ作戦変えるヒントを得る為にプロファイリングするのか・・・
やっぱり手を出してみるか
217:デフォルトの名無しさん
20/04/14 10:48:29 Ez55nAck.net
異世界人「アルゴリズムをあれこれ変える」
主人公「言語をあれこれ変えてみよう」
218:デフォルトの名無しさん
20/04/14 11:07:53 aAi/G6aw.net
時間とメモリ両面のcomplexity考えるのは最適化以前の話
219:デフォルトの名無しさん
20/04/15 17:46:40 /WUIZ9Nz.net
>>212
39の素因数って3,13よね?
√39が6くらいだから探索区間は√mじゃ不十分かなって
でも確かに偶数はいらないから2:[3,5..]でいいね
全部の素因数のリスト作るのに全部掛け合わせて処理はひどいなと見直して思った
リストは早くするなら使わない方針なのね
Quatremとリスト以外(sequenceが代替?)調べて組み込んでみようかな
220:デフォルトの名無しさん
20/04/15 17:47:28 /WUIZ9Nz.net
お礼書き忘れたすみません
回答ありがとうござ�
221:「ますなんとか通ってもらいます
222:デフォルトの名無しさん
20/04/15 19:54:09 JKZ0KcR7.net
>>217
なんの話かよく知らないけど39を素因数分解してるのなら、
約数として3が見つかったら、その時点でもう39が素数じゃないことが判明するから、13を調べる必要ないよ
√39以下の数字調べればオッケー
223:デフォルトの名無しさん
20/04/15 19:55:22 JKZ0KcR7.net
間違えた
「素因数分解してるのなら」じゃなくて「素数判定してるのなら」だった
224:デフォルトの名無しさん
20/04/16 01:02:59.81 6p+dWGIK.net
>>209
計算速度や使用メモリ量以前に、解が正しくないよ。
試しに sumOfDivided [8] やってみ。
もう少し言うと、prime_factors 関数がおかしい。
関数名に相応しくない計算をしていられる。
まずは、必要な個数の正しい素数列を作ることを考えた方がいいと思うぞ。
225:デフォルトの名無しさん
20/04/16 01:13:24.21 .net
>>217
あ、説明で嘘を吐いてしまった。確かに√m以降に素因数は存在しないは偽だった
それでも尚、√で打ち切っていい手筋は揺るがない。
√39より前の3を発見して、39 `quot` 3 (=13) に対して再帰的に同じことをする
ただし割ることを試すのは今割り切れた素数からね(同じ素数で複数回われることもある)。
もう一回3で割ろうとして失敗し、次は√13 を超えるので打ち切って、13 は素数と判定してリストに加える
だから結果として、√m 以降の素因数を取りこぼすことはない
226:デフォルトの名無しさん
20/04/16 09:43:04 xRrLSzP4.net
>>222
素数系のアルゴリズムは手続き的にはよく知られたものが色々あるけど
それをHaskellっぽく(宣言的に)定義しろって言われると割と悩む
STMonadとか使えば手続き的な実装はできるけど何かに負けた気分になる
227:デフォルトの名無しさん
20/04/16 12:23:07.85 DtoAMVDb.net
速度あげようと思ったら、どうのように計算するかということに介入する必要があるから手続き的になるのはしょうがないのでは
228:デフォルトの名無しさん
20/04/16 14:44:08.63 ta7mONc0.net
魔法を使える主人公がなぜか銃を乱射するというマナー違反
を許せない真面目系脇役の魅力
229:デフォルトの名無しさん
20/04/17 17:52:04.90 .net
騎士道はCで書くなど、汚い真似をして勝つことを認めていない
230:デフォルトの名無しさん
20/04/17 18:51:48.64 Tw57yEwr.net
ごきげんよう、高貴なるhaskellプログラマの皆様方
今日も可憐におプログラミングですことよ
ほほほ
231:デフォルトの名無しさん
20/04/17 23:16:02 kOeZUqy9.net
haskellマスターすると新型コロナにかからないってよ
232:デフォルトの名無しさん
20/04/18 03:43:48.65 ehKqAcW4.net
コロナ菌に強い言語なん?
233:デフォルトの名無しさん
20/04/18 11:31:33.48 v8V9P+IO.net
C言語プログラムなどを実行すると電磁波の影響で身体への副作用が発生するからな
副作用を抑え人間本来の自然な免疫力を高めるのがhaskell
234:デフォルトの名無しさん
20/04/18 12:26:02 kkncOpcu.net
haskellマスターで彼女ができました!
235:デフォルトの名無しさん
20/04/18 13:41:19 urv0mT/N.net
>>230
我慢できずにモナドに手を出して感染する事例が後を立たない
モナドは自粛すべきと何度も言われているのに
屁理屈をこねて手を出す者が多すぎる
本当にHaskellに副作用がないのだと詭弁を弄せずごり押しするのならば
絶対にモナドをやるべきではないと言われている
236:デフォルトの名無しさん
20/04/18 19:32:57 DCiZBX2v.net
モナドを「やる」ってなんだよw
モナドを禁止薬物か何かと勘違いしてるのか?
すべての人間は二分される
すなわち「モナドである」人間と、そうでない人間、だ
俺はモナド
お前はモナドではない
「上」で待ってるで
237:デフォルトの名無しさん
20/04/18 20:20:58 aIlZnP1D.net
おれモナド使いだけど、おまえ俺に使われてんのか
238:デフォルトの名無しさん
20/04/18 20:52:26 .net
C言語プログラムなどを実行するとストレスの影響で毛髪への副作用が発生するからな
脱毛を抑え人間本来の自然な論理を書けるのがhaskell
239:デフォルトの名無しさん
20/04/18 22:32:39.62 DCiZBX2v.net
>>234
モナドに使われてるやつほど、自分はモナドを使ってると勘違いするよなw
240:デフォルトの名無しさん
20/04/18 23:24:30 jMxNMUbH.net
モナドを使う時、モナドもまたあなたを使っているのだ
241:デフォルトの名無しさん
20/04/19 01:35:32.46 WM8Q0HWB.net
[状態モナド](URLリンク(wiki.haskell.org))を
[随伴](URLリンク(en.wikipedia.org)) on Rails
に乗せてみる。
``` code
type W x a b = (a, x) -> (b, x)
type S x a b = a -> x -> (b, x)
in_away :: W x c d -> W x b c -> W x a b -> W x a d
in_away cd bc ab = cd . bc . ab
in_home :: S x c d -> S x b c -> S x a b -> S x a d
-- in_home cd bc ab = to_home $ in_away (to_away cd) (to_away bc) (to_away ab) where
-- in_home cd bc ab = ext cd . ext bc . ab where
in_home cd bc ab a = new a %>>=% ab %>>=% bc %>>=% cd where
(%>>=%) = flip ext
ext = to_home_fmap . to_away
new = to_home id
to_home_fmap = (.)
to_home = curry
to_away = uncurry
```
`to_home`が[記事](URLリンク(en.wikipedia.org))での`Phi`
に、`ext`が[Kleisliのスター](URLリンク(en.wikipedia.org))
に対応する。`in_away`は通常の関数の合成で、`in_home`はそれを黒魔術に
翻訳している。
[継続モナド](URLリンク(wiki.haskell.org))も随伴で書ける。
242:デフォルトの名無しさん
20/04/19 01:36:44.08 WM8Q0HWB.net
``` code
type O x a b = (b -> x) -> a -> x
type C x a b = a -> (b -> x) -> x
in_away :: O x c d -> O x b c -> O x a b -> O x a d
in_away cd bc ab = cd %.% bc %.% ab where (%.%) = flip (.)
in_home :: C x c d -> C x b c -> C x a b -> C x a d
-- in_home cd bc ab = to_home $ in_away (to_away cd) (to_away bc) (to_away ab) where
-- in_home cd bc ab = ext cd . ext bc . ab where
in_home cd bc ab a = new a %>>=% ab %>>=% bc %>>=% cd where
(%>>=%) = flip ext
ext = to_home_fmap . to_away
new = to_home id
to_home_fmap = flip (.)
to_home = flip
to_away = flip
```
厳密には、`flip`は随伴ではないが、`Set^op (a, b)`と`Set (b, a)`が集合
として同型になることを使うと、実質的な随伴の役割を果たす。
243:デフォルトの名無しさん
20/04/19 23:13:07 hRJ8C0Os.net
その話題は伸びない。このスレにはHaskellerいないからコード貼ったって誰も読めないし圏論を理解してるやつなんかいないから
244:デフォルトの名無しさん
20/04/20 03:13:59.48 .net
Haskeller 戻ってきて
245:デフォルトの名無しさん
20/04/20 04:21:55.04 VYi0JRSU.net
エアプしかいないの?
246:デフォルトの名無しさん
20/04/20 12:33:40 KoBCLV49.net
ここには数学とプログラミング両方できる人がいるようだからお聞きしたいのだけど
プログラミングのクロージャーってトポロジーのクロージャーから引っ張ってきた用語なの?トポロジーの方の定義を眺めてみてもイマイチつながりが理解出来なくて
247:デフォルトの名無しさん
20/04/20 12:39:30 PYrLoVAx.net
まったく別
248:デフォルトの名無しさん
20/04/20 12:40:47 gGVXVDIS.net
量子化とかもおいおいって思う
249:デフォルトの名無しさん
20/04/20 13:57:45.52 a2Vdb5nD.net
全く別なんすね
ありがとうございます
250:デフォルトの名無しさん
20/04/20 21:31:54.79 CMTCfm7W.net
別でもあるし同じでもある
具体的には
251:デフォルトの名無しさん
20/04/21 00:24:43.90 dIhpNk/e.net
量化子を量子化!
252:デフォルトの名無しさん
20/04/21 01:33:16.33 iOWmjrKd.net
そう言えば、佐野量子化って子もいたな
253:デフォルトの名無しさん
20/04/21 21:16:16.93 JxCMv4cD.net
この言語って純粋に理論的な側面に興味を感じてしまって、アプリ制作進まなくなるわ
254:デフォルトの名無しさん
20/04/23 00:29:18 wNzYQ5IM.net
それよりメモリ管理の理論に興味を感じないか
static変数のようなものを使えばメモリ管理と無縁のアプリ製作ができるのだが
255:デフォルトの名無しさん
20/04/23 02:23:16.94 mBUbZ8gm.net
何を言ってるんだ
256:デフォルトの名無しさん
20/04/23 03:15:59 .net
メモリ管理に興味を感じないか? → メモリ管理と無縁の~ができるのだ
??????
メモリ管理するんじゃなかったのか?
257:デフォルトの名無しさん
20/04/23 07:00:20.01 eoS2PMe8.net
staticおじさん来てんね
258:デフォルトの名無しさん
20/04/23 13:10:01 rjrgI3oq.net
10年以上前から同じ会話してるだろ
免疫がつくまで繰り返すんだぜこれ
259:デフォルトの名無しさん
20/04/23 21:43:23.72 .net
Haskellスレって荒らされてるの?
260:デフォルトの名無しさん
20/04/23 22:27:14.34 mBUbZ8gm.net
これが平常運転
261:デフォルトの名無しさん
20/04/24 01:31:48.04 Zatb8XkV.net
低俗なねらーにはHaskellはら難しすぎたんや…
262:デフォルトの名無しさん
20/04/24 23:19:15.10 FUZNUOcv.net
メモリ管理の様な世俗的な因習に捕らわれず神の領域を安らかたらしめん為の関数型言語では無かったか
263:デフォルトの名無しさん
20/04/25 01:04:25 7jpIjPuc.net
現実のハスケラ達は評価順やサンク潰しの制御のテクニックを競ってマウンティングし合ってるよ
264:デフォルトの名無しさん
20/04/25 01:48:47 n1+IBCwB.net
くだらない事をダベってるくらいなら、Polysemyの基礎でも勉強してろ
URLリンク(sir4ur0n.github.io)
265:デフォルトの名無しさん
20/04/25 04:06:57 .net
それを知るとどんな良い事があるのか、学習の動機づけをください
266:デフォルトの名無しさん
20/04/25 05:14:26.69 n1+IBCwB.net
簡単に言えば、安全で明確でテストしやすいプログラムが書ける。
IOモナドの関数は中でどんなIOアクションでもできてしまい危険だ。
大事なファイルを上書きしようが、大音量でビープを鳴らそうが。
Polysemyに代表されるエフェクトシステムを使うと、
関数の中で使えるIOアクションの内容を関数シグネチャで制限できる。
ファイル読取アクションを宣言した関数の中では、書込や画像表示など他のIOアクションは一切できず安全だ。
また、ビジネスロジックのコードではどんなアクションをするのか(what)というレシピだけを書き、
そのアクションを実際のIOを使ってどの様に実現するか(how)は別のコードで書くことになる。
whatとhowがしっかり分かれ明確だ。
なので、ビジネスロジックのコードは純粋関数で書け、テストしやすくなる。
howのコードだけをモックに変えることもでき、これもまたテストを容易にする。
と言うようなことを例を交えて分かりやすく説明しているのが >>261 の記事だ。
267:デフォルトの名無しさん
20/04/25 08:08:07 .net
目を通しました(理解できたとは言ってない)
粒度の粗い物を制限してもっと細かくして、その組み合わせで書き直すことで間違いを排除する、
(手を入れられない)既存ライブラリに対して、ぼくのかんがえたさいきょうのリファクタリングをエミュレートする基盤となるものですか?
268:デフォルトの名無しさん
20/04/25 10:58:51.70 n1+IBCwB.net
>>264
前半はその通り。
が、すまん、後半は意味が分からない。
リファクタリングをエミュレートするってどういう事?
初めて聞いたフレーズだ。
リファクタリングをする事と、リファクタリングをエミュレートする事の違いを教えてくれ。
269:デフォルトの名無しさん
20/04/25 12:04:03 .net
真のリファクタリングは、設計しなおしてソースコードも書き直す事が含まれるとすると
標準ライブラリであるIOモナドの設計やソースコードを直接弄ることはできませんから、ポリ蝉版は本当にIOを再設計したわけではなく、
リファクタリングを疑似的に再現したという解釈はできないでしょうか
リファクタリングの真似事なのでエミュレートと言いました
270:デフォルトの名無しさん
20/04/25 12:44:25.69 d+Khct7b.net
現実問題として純粋関数だけじゃ成り立たないからね
271:デフォルトの名無しさん
20/04/25 13:20:46.87 n1+IBCwB.net
>>266
なんか、私と貴方の間にリファクタリングという言葉に齟齬があるような・・・
今までIOモナドを直接使っていたコードをPolysemyを使うようにリファクタリングすることはできるよ。
エフェクトシステムの設計者たちはそれを推奨している。
でもそれは、IOライブラリのコードが弄れないから、仕方ないので、Polysemyで擬似的に弄ったように見せましょう、
という話では全くないよ。
272:デフォルトの名無しさん
20/04/25 17:18:59 zjFjVVvP.net
Polysemyってはじめてきいた
Extensible effectsとは別もの?
273:デフォルトの名無しさん
20/04/25 18:29:06.56 n1+IBCwB.net
>>269
名前が違うんだし、そりゃ別物だよ。
同じエフェクトシステムというカテゴリの一員ではあるが。
どう違うかは >>261 を読んで判断してくれ。
短い記事だからすぐ読める。
274:デフォルトの名無しさん
20/04/26 08:52:10 K9Hk9jTV.net
IOは副作用じゃなくて作用だからハスケルは副作用が無いんだなんていってるやつ初めて見たんだけど
275:デフォルトの名無しさん
20/04/26 09:58:35 igL2TSix.net
あらかじめ宣言した型に従う作用じゃなくて
宣言していないことを勝手にやるのが副作用の弊害だから
Haskellにはこの弊害が無いんだな
276:デフォルトの名無しさん
20/04/26 10:22:30 FBxVgLTh.net
>>272
そう言うこと。
でもIOは実質なんでもできちゃうから、かなり不安だよね。
もっとeffectを安全に取り扱いたいよね。
その解のひとつがPolysemyだよ、という話しだ。
>>271
PolysemyのブログPart1を読んで思うところがその嘲笑だけなら、
英語ドキュメントの読解にはちょっと向かないかな。
277:デフォルトの名無しさん
20/04/26 11:39:57 K9Hk9jTV.net
ブログを観る限り素人の書いたクソ記事だな
読む価値なし
278:デフォルトの名無しさん
20/04/26 14:00:45.22 igL2TSix.net
この毒舌が日本の平常運転
279:デフォルトの名無しさん
20/04/26 14:32:48.40 jQbFLCNe.net
Haskellの玄人って研究者とか?
280:デフォルトの名無しさん
20/04/26 17:02:22 i7pDRaTP.net
このスレ住人のことだよ
281:デフォルトの名無しさん
20/04/27 14:12:58.96 AM55pzUu.net
「Prelude>:browse」の実行結果をテキストファイルにリダイレクトする方法
browse.hsという名前のファイルに:browseを記入して保存
保存したファイルのあるディレクトリでコマンドプロンプトを立ち上げて以下を実行
stack ghci < browse.hs > browse.txt
Redirecting Haskell GHCi output to text file [duplicate]
URLリンク(stackoverflow.com)
282:デフォルトの名無しさん
20/04/27 17:47:14 AOepTdHn.net
このスレで延々と副作用やモナドの話ばかりされてるのなんか既視感があると思ったら、物理学板の相対論スレでポアンカレ群やリーマン幾何の話は一切せず
モノの本で読んだようなマイケルソン・モーレイの実験の話に関する持論をひたすら展開して相対論は間違ってる!って騒いでる連中に似てる
283:デフォルトの名無しさん
20/04/27 17:48:43 l27UEbbh.net
相対性理論も量子力学もどっちも間違ってる
284:デフォルトの名無しさん
20/04/27 18:04:41.79 3bdWQ9Vo.net
まあ副作用やモナドに関する理解の甘さは初心者にありがちだからな
285:デフォルトの名無しさん
20/04/27 19:40:47 .net
最新 stack で 7.8.4 をセットアップしようとしたら realgcc.exe を使おうとしてコケる
新しい GHC にはあるみたいだけど古い GHC には mingw\bin に存在しないようだ
なのに使おうとしている
なぜ古いのを入れようとしてるかというと競プロサイトのGHCが古いからだ
最新版で通るコードが向こうで弾かれたりして苛ついたから、じゃあそっちの環境で通るコードを提出してやるよとなってインストールを試みたのだ
スタックで古いバージョンのセットアップに自身ニキ、助けて
286:デフォルトの名無しさん
20/04/27 21:15:06.74 6TeRc6dT.net
静的型付けの話は一切せず
実行時の振る舞いに関する持論をひたすら展開してモナドがーって
これ半分オブジェクト指向だよ
型はオブジェクトではないから型の話を一切しないんだよ
287:デフォルトの名無しさん
20/04/27 22:39:13 .net
相対論スレもHaskellスレ同様に荒らされてるの?
288:デフォルトの名無しさん
20/04/28 00:09:34 Bz0WEXXQ.net
>>282
複数のバージョンを使い分けたいのなら、
Windowsは向かないと思います。
あくせくしてゴチャゴチャになるくらいなら、
さっさと仮想環境にlinux入れてそっちで環境構築した方が
楽で早いのではないでしょうか。
289:デフォルトの名無しさん
20/04/28 00:20:49 fQrwEc0Y.net
Haskellは何でああも副作用を嫌うの?
290:デフォルトの名無しさん
20/04/28 00:24:10 6HXykM7G.net
>>286
だから嫌ってない…
291:デフォルトの名無しさん
20/04/28 01:57:21.75 zsCbc70d.net
>>286
嫌うという表現は置いておくとして、
純粋関数と副作用の伴う関数とをあれほど切り分けたがるのは、
その方がメンテし易いというのが大きな理由の一つだと思う。
292:デフォルトの名無しさん
20/04/28 12:53:37 .net
よしわかった。ならばWSL Ubuntu を導入だ。stackをインストールし、古すぎるので最新版stackに替え、stack setup 7.8.4
The GHC located at /home/devlin/.stack/programs/x86_64-linux/ghc-7.8.4/bin/ghc-7.8.4 failed to compile a sanity check. Please see:
URLリンク(docs.haskellstack.org)
for more information. Exception was:
Received ExitFailure 1 when running
Raw command: /home/devlin/.stack/programs/x86_64-linux/ghc-7.8.4/bin/ghc-7.8.4 /tmp/stack-sanity-check47/Main.hs -no-user-package-db
Run from: /tmp/stack-sanity-check47/
Standard output:
[1 of 1] Compiling Main ( /tmp/stack-sanity-check47/Main.hs, /tmp/stack-sanity-check47/Main.o )
Linking /tmp/stack-sanity-check47/Main ...
Standard error:
/usr/bin/ld: -lgmp a??e|?a??a??a??a??a???
collect2: error: ld returned 1 exit status
神はどうあっても試練を与えようというあああああ!!!!
293:デフォルトの名無しさん
20/04/28 17:08:37 yBopWDZB.net
言語仕様はHaskellでもいいけど実装は、電池が入ってるインタプリタがいい
コンパイラをコンパイルするのも、ネットのサービス終了も嫌だ
294:デフォルトの名無しさん
20/04/28 22:24:50.85 fQrwEc0Y.net
F#ならスクリプト使えるよー
モナドの代わりにコンピューテーション式も使えるよ
副作用も使いまくりだよー
ライブラリーは.NETつかえるよー
GUIはちょっと苦手 でも、ワンレンボディコンのボインちゃん
シャッチョサン、シャッチョサン
シャッチョさんのことだからまけにまけて0円 もってけどろぼー
295:デフォルトの名無しさん
20/04/28 22:37:15 GL0e6TlJ.net
よし採用
296:デフォルトの名無しさん
20/04/29 06:50:08 .net
Elmっているこ?いらんこ?
297:デフォルトの名無しさん
20/04/29 07:13:41 SPs1sTfW.net
分からん
purescriptとかどうなんだろ
298:デフォルトの名無しさん
20/04/29 09:16:57.44 GLX6jWJt.net
agdaをjsにコンパイルするのはどうなの?
299:デフォルトの名無しさん
20/04/29 09:36:37 TuLha3Ht.net
F#スレ落ちてるね
300:デフォルトの名無しさん
20/04/29 10:44:15 JIRjVKl2.net
奴は四天王の中でも最弱
301:デフォルトの名無しさん
20/04/29 10:47:45.94 SPs1sTfW.net
5chごときにスレが立たないとは
魔族の面汚しよ・・・
302:デフォルトの名無しさん
20/04/29 15:25:39.64 Cpi+Il5+.net
>>289
漏れは、Windows 10, WSL, Ubuntu 18.04 で、
Linux側には、日本人が作った、バージョンマネージャーのanyenv で、rbenv, nodenv を使って、
ruby 2.6.6, node 12.16.2 を入れた
yarn は、Windows側に入れて、WSL から、拡張子なしのyarn コマンドを呼べる。
これは、#!/bin/sh で始まるシェルスクリプト
Windows側で、VSCode の拡張機能、Remote WSLも使う
Haskell のhsenv は、使えないのか?
303:298
20/04/29 15:39:17 Cpi+Il5+.net
ちなみに、Ruby on Rails の場合、コンパイルに必要なパッケージは、
sudo apt-get update
してから、
sudo apt install -y build-essential
build-essential には、
gcc(GNU C compiler), g++(GNU C++ compiler), libc6-dev(GNU C Library), make などが入っています
次に、openssl, readline, zlib のパッケージをインストールします。
sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev
データベースの、libsqlite3-dev, sqlite3 をインストールします。
sudo apt-get install -y libsqlite3-dev sqlite3
304:デフォルトの名無しさん
20/04/29 15:47:47 ob+X7Nc0.net
的はずれなのでやめて
305:デフォルトの名無しさん
20/04/29 15:50:08 l6fPvkOQ.net
-lgmpができないならlibgmp-devをインストールすればいい
306:デフォルトの名無しさん
20/04/30 17:28:15 .net
>>299-300
んにゃぴ・・・んまぁ、そう、よくわかんなかったです
>>301
それでようやく原因が判りました
Stack no longer supports Cabal versions below 1.19.2,
but version 1.18.1.5 was found.
This invocation will most likely fail.
To fix this, either use an older version of Stack or a newer resolver
Acceptable resolvers: lts-3.0/nightly-2015-05-05 or later
stack will use a sandboxed GHC it installed
For more information on paths, see 'stack path' and 'stack exec env'
To use this GHC and packages outside of a project, consider using:
stack ghc, stack ghci, stack runghc, or stack exec
7.8.4 のCabal は 1.18.1.5 であるんですが、最新版 stack は 1.19.2 以降のCabal しか対応しない
というわけで諦めました。いうほど 7.8.4 使いたいかって気分になってきて、エラー出たらその都度古いコードに書き直せばいいじゃんってなったんで
このイシューは閉じます。ありがとうございました。
307:デフォルトの名無しさん
20/04/30 17:28:45 .net
>>301じゃなくて>>302だった
308:デフォルトの名無しさん
20/05/02 07:49:02.53 +q7QtdZF.net
cabalってカバルじゃなくカボールなんだな
309:デフォルトの名無しさん
20/05/02 09:29:59.76 S0jsNVj+.net
haskellのライブラリ管理ツールはずっとクソ。
pythonのも大概だけど、haskellはそれを遥かに凌ぐレベルでくそ。
310:デフォルトの名無しさん
20/05/02 12:12:56 2Bfib/9h.net
そろそろocamlの時代じゃねーか?
311:デフォルトの名無しさん
20/05/02 12:50:23.34 F6qz2woZ.net
ライブラリ管理ツールって何をするためのモノなんだ?
ユーザーから何を期待されてるんだ?
312:デフォルトの名無しさん
20/05/02 13:54:24.62 QDKxMZyf.net
シェルスクリプトで管理ではなく
そろそろxmlとかyamlとかの時代を期待されてる説
313:デフォルトの名無しさん
20/05/04 03:20:08.08 tNWuxt0H.net
待ち遠しい「Algorithm Design with鵫askell」
URLリンク(www.cambridge.org)
314:デフォルトの名無しさん
20/05/04 16:45:39 R0S0SfqY.net
ocamlはせっかく盛り返してたのに失言でだいなし
315:デフォルトの名無しさん
20/05/04 23:50:02 Qeb7CV4E.net
どんな失言?
316:デフォルトの名無しさん
20/05/05 13:49:22.34 jdwgKTKz.net
haskellにライブラリ管理ツールなんて無いよね?
317:デフォルトの名無しさん
20/05/06 22:37:05 wUeYrIi1.net
釧路湿原
318:デフォルトの名無しさん
20/05/07 10:57:00 zCrpEpjK.net
書籍「関数プログラミング 珠玉のアルゴリズムデザイン」で分からない所があります。
2ページ目3行目
xsに含まれない最小の数は、filter (<= n) xs に含まれない最小の数ということになる。
ここで < ではなく、<= なのは何故でしょうか。
< を使って条件を厳しくしても、
xs = [0], n = 1 ===> filter (<n) xs = [0]
[0] に含まれない最小数 = 1
xs = [1], n = 1 ===> filter (<n) xs = []
[] に含まれない最小数 = 0
このように問題無いように思えます。
319:デフォルトの名無しさん
20/05/07 16:47:46 /pjDMUqX.net
事実を述べているだけに見えるが
何故あの事実ではなくこの事実を切り取ったのかを知りたがるのが面白い
320:デフォルトの名無しさん
20/05/07 17:22:10 mCGt79kv.net
>>315
その直前に
[0..(length xs)] の範囲にある数の少なくとも1つはxsに含まれていない
とあるので(鳩の巣原理)、その自然な帰結として
length xs より大きい数は、たとえxsに含まれていたとしても探索の対象にする必要はない
ということで filter (<= n) xs (where n = length xs) が出てくるのだと思う
そこで filter (<n) xs では意味がわからない(自明ではない)
321:デフォルトの名無しさん
20/05/08 15:02:16 H/a69LIv.net
仕事でhaskell使ってる人いる?
322:デフォルトの名無しさん
20/05/08 17:29:16 3cwUCrUk.net
>>310
表紙すごい買う気失わせる感じだけどほしいな
かむbりぷbのだーたアルゴリは名著多いし面白いのだといいな(´・ω・`)
323:デフォルトの名無しさん
20/05/08 18:31:16 HMlJY84s.net
>>318
使ってないけど、富士通かな?
川崎の案件で募集してたぞ。
324:デフォルトの名無しさん
20/05/09 06:20:07 djQF9o2a.net
>>320
金融系?
325:デフォルトの名無しさん
20/05/10 01:20:32 nxDhOjOb.net
>>317
理解できました。
ありがとうございました。
326:デフォルトの名無しさん
20/05/22 10:43:13.79 9QfQmUEB.net
URLリンク(wiki.haskell.org)
>Below are some notes for beginners on how to pronounce those strange Haskell operators and 'read' Haskell programs.
>>318
スレリンク(tech板:925番)-
327:デフォルトの名無しさん
20/05/23 00:35:45.46 PUmkxvlF.net
次のように、一つのモナドを遅延的に無限に評価できる関数 repM は定義できるでしょうか?
repM :: (Monad) => m a -> m [a]
xs <- repM (return 1)
print $ take 3 xs -- [1, 1, 1]
ys <- take 2 <$> repM (return 1)
print ys -- [1, 1]
328:デフォルトの名無しさん
20/05/23 01:33:43 m+h1wlWJ.net
>>324
コレは?
repMsub x = return(repeat x)
repM x = x>>=repMsub
main = do
xs<-repM (return 1)
print $ take 3 xs
329:デフォルトの名無しさん
20/05/23 01:44:01.25 m+h1wlWJ.net
あ、コッチの方がかっこいいのか?
でも可読性を犠牲にしだすとperlみたいになるから良くない?
repM = (>>=(return.repeat))
330:デフォルトの名無しさん
20/05/23 01:56:13 PUmkxvlF.net
>>325
>>326
それはひとつのモナドを3回評価しているのではなく、
ひとつのモナドの中の値を3回評価しているのではないでしょうか?
例えば repM (getLine >>= print) を評価すると、
1回しか getLine >>= print を評価しません。
ちなみに、IOモナドに限れば unsafeInterleaveIO 関数が使えます。
また、リストではなくいわゆるストリームなら出来ました。
ですが今はモナド全般に適用でき、リストのモナドを返す関数を求めています。
331:デフォルトの名無しさん
20/05/23 02:01:15 PUmkxvlF.net
>>325
すいません。
補足です。
a <- take 3 <$> repM (getLine >>= print) を評価すれば、
3回の副作用 getLine >>= print が実行され、
a は [(), (), ()] を束縛していて欲しいのです。
332:デフォルトの名無しさん
20/05/23 12:08:02 eKnPDQS2.net
module Main where
import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.Trans (lift)
import Data.Conduit (ConduitT, runConduit, yield, (.|))
import qualified Data.Conduit.List as CL
repIO :: (Monad m, MonadIO m) => IO () -> ConduitT () () m ()
repIO io = do
x <- liftIO io
yield x >> repIO io
repM :: Monad m => m o -> ConduitT i o m r
repM m = do
x <- lift m
yield x >> repM m
main :: IO ()
main = do
x1 <- runConduit $ repIO (getLine >>= print) .| CL.take 3
print x1 -- [(),(),()]
x2 <- runConduit $ repM (getLine >>= print) .| CL.take 3
print x2 -- [(),(),()]
let x3 = runConduit $ repM [1,2] .| CL.take 3
print x3 -- [[1,1,1],[1,1,2],[1,2,1],[1,2,2],[2,1,1],[2,1,2],[2,2,1],[2,2,2]]
let x4 = runConduit $ repM [] .| CL.take 3
print (x4 :: [[Int]]) -- []
let x5 = runConduit $ repM (J
333:ust 1) .| CL.take 3 print x5 -- Just [1,1,1] let x6 = runConduit $ repM Nothing .| CL.take 3 print (x6 :: Maybe [Int]) -- Nothing
334:デフォルトの名無しさん
20/05/23 13:15:18.54 eKnPDQS2.net
あ、ストリームでできたってこういうことか
335:デフォルトの名無しさん
20/05/24 19:39:02 A0PpU4F1.net
HaskellのフレームワークってGHC拡張たくさん使われてるから、基本的な文法だけ知ってても、エラーが出たら意味分からなくなるという初心者泣かせな言語だな。地道にコツコツ知らないことを勉強してってるわ。
使いこなしてる人ホンマ羨ましい。
336:デフォルトの名無しさん
20/05/24 22:41:15 oexHBYog.net
The state of GHC on ARM
URLリンク(www.haskell.org)
337:デフォルトの名無しさん
20/05/25 14:19:28 HRWjfAZ+.net
>>331
そういう悪い所を悪いと言えないのが初心者で
初心者の甘い評価がなければ持続不可能なのがGHCじゃないか
338:デフォルトの名無しさん
20/05/25 19:07:59 b4izxg0D.net
むしろ俺は段階的に学べていいと思ったが
339:デフォルトの名無しさん
20/05/26 13:27:47.52 w7oGlmub.net
haskellのフレームワークとやらが具体的に何を指しているのか分からん。
YesodやServantなどのWebフレームワークしか思いつかんが。
いずれにしても、そもそも初心者がフレームワークに頼るべきではない。
初心者を抜けて、さぁ本格的なアプリでも作ってみるかとなった時に使えばいい。
初心者は15パズルやTODOツールみたいな簡単なアプリをフルスクラッチで作ってみて、
言語拡張の必要性や、有用なライブラリの使い方を少しずつ学ぶことを奨める。
340:デフォルトの名無しさん
20/05/27 11:14:49 xJStjlCD.net
そういうのはつまらんのだよ
341:デフォルトの名無しさん
20/05/27 13:16:13 SIsgBJ88.net
>>336
初心者が面白いと思える学べる題材ってなんかあるかな?
C#だとゲームとかGUIとか簡単なのになぁ
Pythonだって色々思い浮かぶのに
342:デフォルトの名無しさん
20/05/27 17:32:08 Ro2X8Fae.net
プロジェクトオイラーでもやったら
343:デフォルトの名無しさん
20/05/29 00:14:38.34 Hx2r4buk.net
haskell興味あるのですがhaskellの長所と短所ってなんですかる
344:デフォルトの名無しさん
20/05/29 00:57:51.48 .net
若さと情熱に身を任せたいなら C、衰えても続けたいなら Haskell
345:デフォルトの名無しさん
20/05/29 07:22:48 mJaFRwIH.net
GoとRustが無かった時代には長所がいっぱいあったんだろう
もし、その時代のコードを変更することなく今使えるならそれも長所だが
346:デフォルトの名無しさん
20/05/29 07:54:35.82 7l9AMad4.net
>>339
長所は難しいことをより難しく書けること
短所は簡単なことでも難しく書かざるを得ないこと
本質的に純粋関数だけじゃリリースできないことも大問題ではある
切り分けで対処しても破壊を含むコードは必ず走る
理想が現実に敗北したような体系だから手を出さないほうがいいよ
347:デフォルトの名無しさん
20/05/29 08:30:23.80 wwuYcwOw.net
>>339
長所は、宣言的に分かりやすく書いたプログラムが意図通りにちゃんと動くことです。
何をするのかと、どのようにするのか、この二者をきっちり分けてプログラムできるのがHaskellの大きな魅力です。
(できると言っても、初心者が簡単にできることではありません。 その方向に正しく精進する必要があります。)
短所は、少し上のレスでも言及されていますが、入門を抜けた後に何に取り組めば良いのか分からなくなることです。
始めから何か目的があってHaskellを学び始めたのでしたら良いのですが、そうでなければ、
魅力的な題材の無さに愕然とし、路頭に迷うことになるでしょう。
実はgithub等を漁れば先輩方の様々はジャンルの非常に参考になるプログラムを数多く拝見でき、
自分も取り組んでみたくなる題材がたくさん見つかるのですが、逆に言えばそうやって努力して探さないと見つかりません。
348:デフォルトの名無しさん
20/05/29 09:57:17 zRWEM9Qa.net
>>342
後半、そういう批判よくあるけど毎回何言ってんのかよくわからん
お前達は何を批判してるの?
349:デフォルトの名無しさん
20/05/29 10:24:25.66 mJaFRwIH.net
過激派と思ってた奴に中道の仕事を奪われる
理論的にありえないと思っていた中道と中道の対立が現実になる
350:デフォルトの名無しさん
20/05/29 11:22:41 xO3kN7Ry.net
どんなに多くの短所があろうが
それらに勝る長所が一つあれば好きになる
人でもプログラミング言語でも
351:デフォルトの名無しさん
20/05/29 11:35:07 OBuVVMWP.net
>>339
Haskellに対して懐疑的だった初学者がParsec使ってパーサー書いてみた感じだと
長所
バグ皆無のパーサーをBNFを書き写すように簡潔に書ける
(自分はCやrubyでは書けなかった)
問題に応じて言語内言語を作れるので、コードの量を極めて少なくできる
短所
yaccやbisonより学ぶのにかなり時間がかかりそう
言語内言語を作れてしまうので、ぱっと見ただけではコードを理解できない
(数式を理解するには記号の意味を理解している必要があるのと同じ)
yaccやbisonを使った経験は無い
だが、Haskellの方が応用が利き問題の解決の仕方が美しいので学びたいとは思わなくなった
解決したい具体的な問題があり、自分が学んできた言語だとコードが大きく複雑になりそうで、新しい概念を学ぶ余裕と覚悟があるなら良いと思う
ただ便利そうなのを探してるとか興味があるってだけだと挫折するかも
Haskellを参考にしたより新しい言語を学ぶ方がスマートかもしれない
自分みたいにHaskellに懐疑的で徹底的に学んで悪口書いてやろうと思っているならマジお勧めwww
352:デフォルトの名無しさん
20/05/30 19:36:21.64 /U1uledC.net
>>339
長所: 多くのバグをコンパイル時に潰せる
短所: 手続き型プログラミングにおける既知の資産(アルゴリズムなど)が活用しにくい
353:デフォルトの名無しさん
20/06/01 05:07:50.77 seoK/8uJ.net
Ocamlを使わないといけなくなっていじり始めたけど、あれもこれも出来なくて不便だな
やたら冗長になるし…
354:デフォルトの名無しさん
20/06/01 07:39:57.03 L1Mt0gVE.net
書くのが不便になる代わりに、ぱっと見ただけで理解できるコードになる
という軍師の言葉をぱっと見ただけで信じる者だけがOCamlを使いなさい
355:デフォルトの名無しさん
20/06/01 08:15:03 dkkr+KCk.net
>>349
できないことの例を教えてください
356:デフォルトの名無しさん
20/06/02 01:46:24.39 UWOmEsh4.net
>>329
>>330
やはり純粋なリストだけでは望む仕組みは作れないという結論に達しました。
逆に言えば、そういう事が容易にできるのがストリームの利点の一つなのだと理解しました。
ありがとうございました。
357:デフォルトの名無しさん
20/06/05 23:44:13.56 aqmhehrv.net
memptyってなんでmunitやmidとかじゃないんだろうな?
emptyの心がよーわからん
文字列のように意味的に空なモノイドもあるが、
空じゃない例の方が圧倒的に多く一般的じゃないか?
ま、どうでもいいんだけどな
358:デフォルトの名無しさん
20/06/06 08:31:53.87 .net
let nop = mempty in ...ってやってる(嘘)
359:デフォルトの名無しさん
20/06/10 18:32:52.39 vPvQB3B1.net
top level の型の指定についての質問です。
haskellのルールでtop levelでないところでは曖昧な型で型推論してくれて通るけど、top levelでは一意に型が決まらないとダメとかなんとかそういうルールがあって、
それでハマって苦労した記憶があるんですが、今その事ふっと思い出したんですが、詳しい内容が思い出せません。
haskell ambiguous top level
とかでグクってもそれらしい話しが出てこないんですけど、なんか思い当たる方おられませんか?
360:デフォルトの名無しさん
20/06/11 20:57:26 h7Wncfkb.net
>>355
どういうことか、何か例を挙げることはできますか?
361:デフォルトの名無しさん
20/06/11 23:57:59 oU50Re4d.net
>>356
レスありがとうございます。
当時なんかのプログラム組んでてハマったんですが、どんな例だったかは思い出せません。
しかし制限の名前はわかりました。
monomorphic restriction (単相性制限) という奴でした。
ググってみると多相性を無制限に認めてしまうとメモ化の実装が難しくなるようで性能に影響してしまう事を避けるための制限のようです。
こまめに型宣言書くようにするか、性能を犠牲にしてもよいなら制限をなくすオプションとかもghcとかには用意されてるので実害は無いんですけど、昔ハマって原因突き止めるのにエライ苦労したのでなんだったかふっと気になってお聞きしました。
お騒がせしました。
362:デフォルトの名無しさん
20/06/12 03:07:06 YpUxhodA.net
>>357
いえ、お気になさらず。
こちらも勉強になりました。
363:デフォルトの名無しさん
20/06/20 10:17:27.94 6v+H5Lhm.net
今、最新のghcでdependent typesは使えますか?
364:デフォルトの名無しさん
20/06/23 00:33:49.50 2ZCsz0wY.net
次の2つの関数の型の違いを説明していただけないでしょうか。
f :: C a => T a -> b -> b
g :: T a -> (C a => b) -> b
関数gのようなconstraintの使い方にはこのような効果や意味がある、
とはっきり説明できず、モヤモヤしています。
また、このようなconstraintの使い方には特別な用語があるのでしょうか。
webで検索して調べてはいますが、適切なキーワードが思いつかず、苦労しています。
365:デフォルトの名無しさん
20/06/27 16:04:56.51 FJC3hMrg.net
Haskell用語だけでは説明できない気がする
C++用語で
a -> bのaとbはtemplateを実体化する引数
C a => bはtemplateの宣言であって実体化ではないのでgは意味がわからない
366:デフォルトの名無しさん
20/06/28 01:53:39.90 .net
Steamで買えるHaskell製ゲームを教えて
367:デフォルトの名無しさん
20/06/28 10:31:17 hu4PmWPn.net
>>361
レスありがとうございます。
すいません、C++に精通していないため、templateの実体化や宣言の意味がよく分かりません。
件の関数型は次のブログにありました。
Introduction to Singletons (Part 1)
URLリンク(blog.jle.im)
ここの Going backwards の節です。
(昔、別のWebページでも見て、その時も不思議に思っていたのですが、どこのページだったか忘れてしまいました)
そこでは
withSingDSI :: SingDS s -> (SingDSI s => r) -> r
という型です。
確かに SingDSI s => のconstraintを外すと、この関数を呼び出すところで型エラーとなってコンパイルできません。
代わりに、型シグネチャの先頭に SingDSI s => を書いたとしても、です。
しかし、なぜ型が合わないのか理由が分かりません。
何かしらの意味があるはずなのですが・・・
368:デフォルトの名無しさん
20/06/29 23:47:59.12 MeiET0BU.net
>>363
のリンク先の話は中々勉強になるなぁ。
自分でこんなの使いこなせるようになるとは思えないけど。
369:デフォルトの名無しさん
20/07/02 23:40:38 Rg/xVuvf.net
>>360
Haskell勉強中で答えられるほどの知識無いけど
constraintの意味から察するに、右の引数の型が正格評価されていないうちには受け入れないということでは
遅延的に型を選択して返すような関数は作れるけど、それを明示せずに正格評価の関数に渡せてしまうと追跡困難になる
引数の型を決定しておかないと渡せないようになってるんじゃないかな
つまり、前者は第一引数の型を指定してて、後者は第二引数の型を指定しているというだけだと思う
知らんけど
370:デフォルトの名無しさん
20/07/04 23:44:16 LjgILXlp.net
すごいブログを見てしまった後では気が引けるが、前に書いた随伴をhtmlにした
[デフォルトの名無しさん](URLリンク(pastebin.com))
なんか動いているな、程度の確認しかしていないのでバギーだと思う
サイズが大きいけどほとんどがcss
パット見、jsは、require, jquery, mathjaxぐらい
実行環境はihaskell
371:デフォルトの名無しさん
20/07/27 22:40:30.17 XpS4ozgV.net
遅延評価のありがたみよくわからんかったけど
なんとなく分かった
使うか使わない情報、ひとまとめに定義したいんだけど
使わないのなら、情報取りに行くだけ無駄
でも、遅延評価なら、無駄と思える情報も定義できる
なぜなら、使って初めて情報を取りに行くのだから
なるほどね と思った
372:デフォルトの名無しさん
20/07/27 22:51:22.29 u9oz0ryS.net
有名人だらけで楽しみですな。
URLリンク(haskell.love)
373:デフォルトの名無しさん
20/08/13 17:57:45.06 AeuuY+wz.net
圏論入門 Haskellで計算する具体例から
雪田修一 (単行本)
という本が近々出るので、Haskellの予習のためにHaskellの本を買いました。
プログラミング環境は何をインストールするのがおすすめでしょうか?
OSはWindows 10を使っています。
374:デフォルトの名無しさん
20/08/13 18:55:01.02 AeuuY+wz.net
Haskell Platformというのがいいみたいですね。
でもダウンロードしようとしたら、まず、Chocolateyとかいうのをインストールしなくちゃいけないんですね。
大丈夫ですか?これ?
375:デフォルトの名無しさん
20/08/13 21:17:46.02 .net
Windows Subsystem for Linux 2 (WSL for short)を有効化してWSL用ディストリビューション(Ubuntu 20.04 LTSなど)をWindows ストアからインストールすることで、Windows内で仮想的にリナックスを使ってそこでHaskellを始めるのが良いです
376:デフォルトの名無しさん
20/08/13 21:24:06.64 AeuuY+wz.net
Windowsと比較してリナックスの利点は何でしょうか?
大きなアドバンテージはありますか?
377:デフォルトの名無しさん
20/08/14 06:03:07.79 OycuixUd.net
>>370
今のHaskell Platformのインストールってそういう感じになってるんだな
Chocolatey自体はWindowsでそこそこよく使われているパッケージマネージャなので一応信頼してよい
378:デフォルトの名無しさん
20/08/14 08:46:51 XgOd4/dA.net
>>371
Windowsにそのままインストールしちゃいました。
Windows PowerShellから起動する以外の使い方はないでしょうか?
GHCiというのもグラフィカルユーザーインターフェースのソフトはないのでしょうか?
379:デフォルトの名無しさん
20/08/14 12:57:45.74 XgOd4/dA.net
リストとタプルについてなんですが、Pythonでのリストとタプルとは違いがあるようです:
let a = [1,2,3]
drop 1 a
としてもa == [2,3]とはなりません。
let b = (1,2,3)
drop 1 b
とするとエラーになります。
Pythonの場合は、a = [1,2,3]に要素を追加できましたが、b = (1,2,3)にはタプルがイミュータブルであるため追加できませんでした。
ですが、b[1:]とすれば、(2,3)というタプルが得られたと思います。
どう考えればいいのでしょうか?
380:デフォルトの名無しさん
20/08/14 17:17:33.31 58KQIAkg.net
>>375
副作用のあるコードの書き方を見せるのは簡単だけど、関数型が初めてなら
まずはHaskellのチュートリアルを読んで関数型の考え方を出来るようになったほうがいい
381:デフォルトの名無しさん
20/08/14 17:46:17.87 XgOd4/dA.net
>>376
ありがとうございます。
「すごいHaskellたのしく学ぼう!」という本の第1章を読み終わりました。この本を読んでいこうと思います。
382:デフォルトの名無しさん
20/08/14 20:54:14.09 .net
なぜエラーになるかといえば、タプルにdropはないからです
リストは『全て同じ型』の要素の片方向リストです。要素数は可変です。C++のforward_listをイメージしてください
タプルは『それぞれ好きな型の組み合わせ』であり、リストではありません。要素数は固定です
両者は本質的に内部実装が異なります。リストは要素と、次に辿る先の情報を組にしたデータ構造、一方でタプルはその数だけデータを納めるのみのデータ構造です
抽象的には、リストは2要素のタプルであり、一項目に要素、二項目は(再帰的に)リストを保有します。
こうすることで、二項目を見れば(リストなので)『要素と、二項目にまたリスト』が格納されています
そのリストの二項目を見れば・・・となって単方向リストが実装できている事が理解できます
タプル(,)は二項関数であるとみなせます。コンマの左側と右側に一つずつ何かを取って入れる関数です。
リストでは実際は『:』という二項関数が二項タプルと同じ役目を果たします。つまり
要素 : リスト
のように書き
(要素, リスト)
と抽象的に同じであると気づくことができます。
383:デフォルトの名無しさん
20/08/14 21:56:07.86 19vTStSCU
【A型の人ごめん】「まじめ人間」は、自分の人生を生きられず、しかもお金持ちになれない。
URLリンク(www.youtube.com)
【人生観変わる話】「サラリーマン脳」のヤバい特徴5選。
URLリンク(www.youtube.com)
【人生終了】情弱がハマる「貧困スパイラル」のリアル。
URLリンク(www.youtube.com)
バカでもわかる!ネットビジネスの始め方。
URLリンク(www.youtube.com)
時給労働から卒業しよう!貧乏人が知らない「お金の稼ぎ方」まとめ。
URLリンク(www.youtube.com)
【人生攻略】経験・実績ゼロのあなたが、最短で何者かになる方法。
URLリンク(www.youtube.com)
空気を読んで生きてる「まじめ人間」は成功しないよ。
URLリンク(www.youtube.com)
【残酷】貧乏人はいつも忙しいのに、お金持ちは暇である理由。
URLリンク(www.youtube.com)
384:デフォルトの名無しさん
20/08/14 23:21:17.25 OycuixUd.net
>>375
コンパイルエラーの文章を読んでぐぐる癖をつけよう
覚えはじめの頃に出会うエラーは大抵は文法ミスか型エラーだろうから
ぐぐれば「何が悪いか」はだいたい解決する
「なぜ悪いか」はすごいHaskellあたりを読み進めていけば習得できるはず
385:デフォルトの名無しさん
20/08/15 17:24:00.25 uxgG4TyL.net
>>378-380
ありがとうございました。
386:デフォルトの名無しさん
20/08/16 18:14:55.92 tHIsB9jz.net
Haskellの本を読んでいると静的型付けだとか出てきます。
単にHaskellの仕様を理解するだけでなくもっと深く、どういう考え方でHaskellというプログラミング言語が設計されたのかにも興味があります。
プログラミング言語論みたいな本でおすすめの本はないでしょうか?
387:デフォルトの名無しさん
20/08/16 21:18:57.26 EuDMb00g.net
Haskellはある日突然に誕生したわけではなく、
その前身のMirandaとKRCという関数型言語から
多くの特質を受け継いでいます
これら言語に関してはW*k*p*d*aで簡潔に解説されてるので、
まずそちらを一読したのちに参考文献に当たるべきでしょう
以下ではW*k*p*d*aで欠けている日本語の文献を紹介します
Miranda
[1] 第7章 Miranda, p139-163,
新しいプログラミング・パラダイム, 共立出版, 1989年
URLリンク(www.am*z*n.c*.j*)
Mirandaに関する包括的な解説
[2] 関数プログラミング, 近代科学社, 1991年
URLリンク(www.am*z*n.c*.j*)
Mirandaを用いた関数型プログラミングの入門書
モナドを含む圏論の応用/発展が誕生する以前の時代に書かれた貴重な教科書
KRC
[3] 4. 関数型言語 KRC, p36-47,
新世代プログラミング, 共立出版, 1986年
URLリンク(www.am*z*n.c*.j*)
[4] 6.2 KRC (Kent Recursive Caluculator), p132-142,
プログラミング言語の新潮流, 共立出版, 1988年
URLリンク(www.am*z*n.c*.j*)
[3], [4] ともKRCに関する包括的な解説
KRCはすでにインデントベースの構文/純粋関数型/ パターンマッチ/リスト内包表記
といった特質を備えた動的型付け関数型言語でした
388:デフォルトの名無しさん
20/08/16 21:54:00.05 jqjR96Dg.net
>>382
まず、Types and programming languages とSteve Awodey の Category Theory 読んでからや。
Haskell の話するのは。
389:デフォルトの名無しさん
20/08/16 22:04:09.80 mrCar2cd.net
Haskellは魔窟の巣窟や 近寄るものは内臓から食い散らかされるデー
初心者はPythonが最適やろ~
390:デフォルトの名無しさん
20/08/17 17:36:03 CFLjXFs2.net
>>383-384
ありがとうございました。
Types and programming languagesというのが比較的新しい本なので、興味を持ちました。
391:デフォルトの名無しさん
20/08/17 18:54:59.27 CFLjXFs2.net
クイックソートを行う関数を作ったのですが、エラーが出ます。どこが間違っていますか?
quicksort :: (Ord a) => [a] -> [a]
quicksort [] = []
quicksort (x:xs) = (quicksort [t | t <- xs, t <= x]) ++ [x] ++ (quicksort [t | t <- xs, x < t])
392:デフォルトの名無しさん
20/08/17 19:01:32.08 QJrG17W6.net
>>387
Haskell初心者に限った事柄ではないけれど、
こうした場で質問する者の心構えとして
出てしまったエラーメッセージをコピペする
といった、当たり前の行動は身につけるべきだと思うよ
393:デフォルトの名無しさん
20/08/17 19:03:19.26 CFLjXFs2.net
>>388
ありがとうございます。
エラーメッセージは以下です。
Prelude> :r
[1 of 1] Compiling Main ( baby.hs, interpreted )
baby.hs:153:1: error:
parse error (possibly incorrect indentation or mismatched brackets)
|
153 | quicksort :: (Ord a) => [a] -> [a]
| ^
Failed, no modules loaded.
394:デフォルトの名無しさん
20/08/17 19:05:47.77 CFLjXFs2.net
インデントも間違っていないと思いますし、カッコも問題ないと思うのですが。
395:デフォルトの名無しさん
20/08/17 20:38:28.08 0Q701Csj.net
>>390
>>387 をコピペしたら、俺の環境では動いたよ。
取り急ぎ。
396:デフォルトの名無しさん
20/08/18 02:46:50.61 rj5JRKyz.net
153行より前の部分がおかしいんでしょ
397:デフォルトの名無しさん
20/08/18 10:50:34 QANbTDtx.net
>>391-392
ありがとうございました。
>>392
ご指摘どおりでした。ありがとうございました。
398:デフォルトの名無しさん
20/08/19 15:58:22.36 FHOhxH/M.net
(1)と(2)で同じ関数だそうです。
add :: Int -> Int -> Int
は
add :: Int -> (Int -> Int)
と等価だそうです。
だとするならば、
(1)のほうが理屈の分かる書き方のように感じます。
(2)はadd' :: Int -> Int -> Intであると宣言しておきながら、その中身の表現を見ると、2つのInt型の引数を受け取ってその和を返す関数にしか見えません。
それにもかかわらず、add' 1は1引数の関数で引数に1を足す関数を表しています。非常に違和感を覚えるのですが、(2)は一体どういうことなのでしょうか?
わかりにくいです。
(1)
add :: Int -> Int -> Int
add n = \x -> x + n
(2)
add' :: Int -> Int -> Int
add' n m = n + m
399:デフォルトの名無しさん
20/08/19 15:59:38.45 FHOhxH/M.net
単なる表現方法と割り切ればいいのでしょうか?
400:デフォルトの名無しさん
20/08/19 16:07:34.77 FHOhxH/M.net
nに対して、「mにn+mを対応させる関数」を対応させる関数の表記法として、
add' n m = n + m
を採用するというのが非常に不自然に思います。
401:デフォルトの名無しさん
20/08/19 16:24:31.96 amUamLwq.net
入門書のカリー化の箇所を読めばいいんじゃね
haskell内での関数は一変数関数として扱えて、
add' n m = (add' n) m
というだけ
402:デフォルトの名無しさん
20/08/19 16:31:52.13 FHOhxH/M.net
>>397
ありがとうございます。
(1)の表記法だけ許してほしいと思うんです。(2)だけみたらまるで2変数関数のように見えますから。
403:デフォルトの名無しさん
20/08/19 20:35:34.21 1ghAy1sC.net
(今は結合性と優先順位は無視していいので)
n + m
は
(+) n m
と同じ意味になる。
つまり(2)は
add = (+)
に変数を明示して右辺の演算子を中置記法に戻しただけ
むしろ変数増やしたのが見にくい原因
404:デフォルトの名無しさん
20/08/20 07:58:20.18 mQjEXV61.net
>>394
(1) の展開は中途半端で、ちゃんと書くならこう
(0)
add :: Int -> Int -> Int
add = \n -> \m -> n + m
これを(1)や(2) のように書いてもよいというのはHaskellの決め事
慣れないうちは常にこう書いていてもよいが
書くのも読むのも段々面倒になってくると思う
慣れればあまり意識せずに読み替えられるので
ついでに言うと
真の2変数関数が必要ならタプルを用いてこう書く
add'' :: (Int, Int) -> Int
add'' (n, m) = n + m
これらは確かに厳密には区別しなくてはいけないが、
ゆるく同一視しておくほうが便利なことも多いので
Haskellでは(2)のような書き方が許されている、と自分は理解している
405:デフォルトの名無しさん
20/08/20 08:57:36.69 LuBKaaMH.net
>>399-400
ありがとうございます。
>>400
(0)
add :: Int -> Int -> Int
add = \n -> \m -> n + m
この書き方が本質的で一番わかりやすいですね。
ありがとうございます。
406:デフォルトの名無しさん
20/08/20 11:51:35 LuBKaaMH.net
圏論入門 Haskellで計算する具体例から
雪田修一 (単行本)
図書館に購入リクエスト済みです。楽しみです。
407:デフォルトの名無しさん
20/08/20 14:53:48.13 uVfTx7sc.net
>>1 simulationライブラリで純粋な関数式プログラミングをする URLリンク(x0000.net)<)
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
VM + ASM を書いた (C#, DX) * x86 ではない!
simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ
VM + ASM のダウンロード
URLリンク(up.x0000.net)
408:デフォルトの名無しさん
20/08/21 10:45:55 VIa1N6p8.net
関数の合成をする関数(.)を以下のように誤って書きました。
(x -> f (g x))はラムダ関数なので(\x -> f (g x))と書かないといけないと思います。
ですが、以下のコードでちゃんと動作しました。なぜでしょうか?
(.) :: (b -> c) -> (a -> b) -> a -> c
. = \g -> f -> (x -> f (g x))
409:デフォルトの名無しさん
20/08/21 11:35:07.30 VIa1N6p8.net
あともう一つ質問があります。
「すごいHaskellたのしく学ぼう!」に「関数合成は右結合なので、一度にたくさんの関数を合成できます。f (g (z x))は(f . g. z) xと等価です。」
と書いてありますが、左結合だったとしても、同様に一度にたくさんの関数を合成できるはずです。
左結合だったとしてもf (g (z x))は(f . g. z) xと等価であることに変わりはないはずです。
これは一体何が言いたいのでしょうか?
410:デフォルトの名無しさん
20/08/21 18:51:58.39 3Xa4QDEo.net
>>405
左結合だと等価にならないよ
411:デフォルトの名無しさん
20/08/21 18:53:55 VIa1N6p8.net
(f . g) . z = f . (g . z)だから等価だと思ったんですけど、間違っていますか?
412:デフォルトの名無しさん
20/08/21 20:51:03.06 3LvfPoDL.net
通常の関数適用は左結合だから
f g z x は ((f g) z) x と同じ意味になって
コンパイルエラーになっちゃうけど
関数合成演算子を使うと括弧が減るよ、ということが言いたいはず
関数合成自体は結合的だからそこの向きは確かに関係ないね
413:デフォルトの名無しさん
20/08/21 22:34:08.88 nqLClnr+.net
>>405
単純に
>f (g (z x))は(f . g. z) xと等価です。
は、数学と同じ優先順位ですよってことじゃない?
それ以上の疑問は抱かんかったけど
試してないけど、俺も>>406に同意
多分整数演算で除算演算の関数を関数合成すれば、いくつか試せば同一にならないのは簡単に見つかるはず
引数をたくさん試すだけでも見つかりそう めんどこっいのでやらないけど
414:デフォルトの名無しさん
20/08/21 23:19:07.20 nqLClnr+.net
>>407
それってそうなの?
俺は、数学の本好きで読んでるんだけど、そこまで基本的なことは突き詰めてないw
写像の合成が結合則を満たす ものもたくさんありそうだけど、
写像の合成は必ず結合則を満たすものなの?そこから疑問に思った方がいいんじゃない?
数学の本読んでると、右XXと左XXと区別するものが多いんで、普通に満たさないと思ってたw
いや、俺が間違ってるかもしれんから、そこから調べてくれると俺もうれしい
ちなみに、大学数学レベルなのが 1+1=2 の証明。俺は調べたくないw
415:デフォルトの名無しさん
20/08/22 00:32:18.31 75MjfSAz.net
>>410
位相空間論の入門書には大抵書いてあるよ
あと「Haskellによる関数プログラミングの思考法」にも(証明は無いが)言及があった
((f . g) . h) x
= (f . g) (h x)
= f (g (h x))
= f ((g . h) x)
= (f . (g . h)) x
この等号は計算結果が等しいという意味で
途中の時間・空間計算量の違いは気にしていないので念の為
416:デフォルトの名無しさん
20/08/22 00:48:03.06 66roH7xF.net
>>410
しらんけど、位相空間って連続写像仮定してないか?
プログラミング言語でいう写像とは違う
位相空間論で一般的に言われているのならその定理を示した方がいいんじゃない?
個人的には位相空間論の書籍に限定しているのが気になる。どちらかと言うと代数学の方が一般的と思うが。
>あと「Haskellによる関数プログラミングの思考法」にも(証明は無いが)言及があった
こっちはたぶん書籍持ってるかな?ページ数教えてくれる?
四則演算というか群論でいう、逆元を仮定しているとかそんな感じやない?しらんけど
数学ではよくあるけど、仮定が大事 それを無視するから、結論を間違えるのはよくある
貴方が間違えたかどうかは知らんど
写像の合成で結合則が必ず成り立つのなら、そのような記述はどっかの書籍に必ずある
自分は見たこと無い。あるとすれば、なんらかの仮定で限定されている。
417:デフォルトの名無しさん
20/08/22 01:01:19.51 fPcZe606.net
知らん過ぎ
418:デフォルトの名無しさん
20/08/22 01:40:43.87 75MjfSAz.net
419:rget="_blank" class="reply_link">>>412 > 個人的には位相空間論の書籍に限定しているのが気になる。どちらかと言うと代数学の方が一般的と思うが。 位相空間論の~っていうのは言い方が悪かったかな、「集合と位相」みたいなタイプのやつ 大抵最初の方で一般の集合論をやるのでそういうつもりで言った 仮定が大事というのはその通りで もちろん連続性も全単射も仮定しない一般の写像に対する定理 集合A, B, C, D と写像 f: C->D, g: B->C, h: A->B に対して (f . g) . h = f . (g . h) が成り立つ > >あと「Haskellによる関数プログラミングの思考法」にも(証明は無いが)言及があった > こっちはたぶん書籍持ってるかな?ページ数教えてくれる? P.30 第1章 練習問題Eの解答 こっちはあまりにも簡素に書いてあるので見ても何の参考にもならないかもだが… ただしHaskellには全域でない関数があるから(headとかtailみたいな例外を返し得るやつね) そういうのが絡むと結合性が怪しいケースはもしかしたらあるかもしれない
420:デフォルトの名無しさん
20/08/22 12:23:17.90 .net
ここ三年以内に発売されたハスケルの本は?
421:デフォルトの名無しさん
20/08/22 13:18:34.82 g0O87mtN.net
空気読まずに有限集合でやってみる。
``` code
#{-# LANGUAGE ExistentialPython #-}
import math;
import random;
import string;
def none ():
dot = lambda bc, ab: {a : bc [b] for a, b in ab.items ()};
make_map = lambda a, b: dict (zip (a, random.choices (b, k = len (a))));
A = tuple (range (5));
B = random.sample (string.ascii_lowercase, 10);
C = random.sample (string.ascii_uppercase, 8);
D = (math.nan, math.inf, None, (), 'hello', 'world');
ab = make_map (A, B);
bc = make_map (B, C);
cd = make_map (C, D);
assert dot (cd, dot (bc, ab)) == dot (dot (cd, bc), ab);
return ((A, B, C, D), (ab, bc, cd));
out = none ();
```
自分の知る限り、素朴な写像の描像が描けないガジェットに対して「写像」という
言葉は使わないので、写像が結合的かどうかという議論に意味があると思えない。
422:デフォルトの名無しさん
20/08/22 13:19:16.92 g0O87mtN.net
``` code
#{-# LANGUAGE FunctionalJupyter #-}
import IPython.display as display;
def none (node, edge):
f = lambda col, a: {key : (row, col) for row, key in enumerate (a)};
nodes = {};
for val in [f (j, a) for j, a in enumerate (node)]: nodes.update (val);
edges = [];
for xy in edge: edges += [(nodes [x], nodes [y]) for x, y in xy.items ()];
node_out = r"""<text class='clazz' x='{x}' y='{y}'>{z}</text>""";
edge_out = r"""<line class='clazz' x1='{x_0}' y1='{y_0}' x2='{x_1}' y2='{y_1}'/>""";
out = '';
w, h, dw = 100, 20, 20;
for key, val in nodes.items (): out += node_out.format (x = w * val [1], y = h * val [0], z = key);
for a, b in edges: out += edge_out.format (x_0 = w * a [1] + dw, y_0 = h * a [0], x_1 = w * b [1] - dw, y_1 = h * b [0]);
style = r"""<style> text.clazz { dominant-baseline: middle; text-anchor: middle; } line.clazz { stroke: black; fill: none; } </style> """.strip ();
svg = f"""<svg width='400' height='300' viewBox='{-20} {-20} {len (node) * w + 20} {max (map (len, node)) * h + 20}'>{out}</svg>""";
display.display (display.HTML (style + svg));
return None;
none (*out);
```
423:デフォルトの名無しさん
20/08/22 13:31:18 DGMheHKA.net
それで?
会話や食事の中の唾液飛沫の3次元シミュレーションが出来るんですか?
424:デフォルトの名無しさん
20/08/22 13:35:02 j3K8XBr1.net
>>404
あれ、これ今日コンパイルしたらエラーが出た。
単にコンパイルしていなくて、ghciで用意されている(.)を使ってテストしていただけみたいです。
以下の合成関数のコードはおそらく正しいと思います。
comp :: (b -> c) -> (a -> b) -> a -> c
comp = \f -> \g -> (\x -> f (g x))
425:デフォルトの名無しさん
20/08/22 13:36:18.12 j3K8XBr1.net
圏論入門 Haskellで計算する具体例から (日本語) 単行本 ? 2020/8/19
雪田 修一 (著)
この超人気の本を読んだ人いますか?
426:デフォルトの名無しさん
20/08/22 13:41:29.64 j3K8XBr1.net
>>419
この関数の書き方を一度書いたら、
func a b = …
みたいな書き方は気持ち悪くて嫌になりますね。
427:デフォルトの名無しさん
20/08/22 13:45:41.47 j3K8XBr1.net
すごいHaskell、やっと5章まで読み終わりました。
この辺りから難しくなりますか?
428:デフォルトの名無しさん
20/08/22 21:29:49.29 YtG8IJDk.net
難易度竹。
429:デフォルトの名無しさん
20/08/22 21:45:32.55 j3K8XBr1.net
すごいHaskellの6章を読んでいますが、いきなり難しくなりました。
find :: (a -> Bool) -> [a] -> Maybe a
のMaybe aというのは探している要素が見つからなかった場合に返されるNothingが属するような型を用意したかったからですか?
430:デフォルトの名無しさん
20/08/22 21:46:48.62 j3K8XBr1.net
もしそうだとして、質問なんですが、Nothingはあらゆる型に属すると約束すればいいだけの話ではないんですか?
431:デフォルトの名無しさん
20/08/23 07:53:38.79 m55Vd3Cb.net
「null安全」でググれ
かつて、あらゆる型に属するnullを導入していた言語が、
nullのない型を別途導入する方向に動いている
432:デフォルトの名無しさん
20/08/23 10:09:34 ts+Zp8he.net
ヌルポはどこにバグがあるかを教えてくれるが、
ボトポにはそれさえない。
``` code
bottom :: a
bottom = bottom
dangerous_find :: (a -> Bool) -> [a] -> a
dangerous_find _ [] = bottom
dangerous_find pred (a : as) = if pred a then a else dangerous_find pred as
```
ただ役に立たないというだけでなく、
危険なほど役に立たない関数も作りたければ作れる。
433:デフォルトの名無しさん
20/08/23 11:59:38.54 PT3WAMjf.net
>>405
これ、左結合が出来ないからじゃない
考え方としては左結合はありなんだろうけど、
実質無いということ
f.g.h x で左結合やろうとしても、
関数適用と合成の優先順位で関数適用の方が優先される
結果として右結合にしかならない。