24/10/05 11:40:17.86 gdCH0E84.net
圏論のコンコルド効果について。
Haskellのコーティングの質をあげようと、
一生懸命頑張って勉強したのに実はほとんど役に立たない…
「大量の時間と労力を学習したのに悔しい!」
そのことを認めることができず、懸命に圏論のプログラミングでの有用性を力説し、学習布教に努める。
522:デフォルトの名無しさん
24/10/05 13:16:57.88 AoKf42Y0.net
>>519
異なる順序でreductionする方法がある場合は、どの順序でreductionしても同じ結果になるだろ?
IO a >>= (a -> IO b) -> IO bなら当たり前だけど(a -> IO b) -> IO bをa -> IO bに先にreduction可能
523:デフォルトの名無しさん
24/10/05 13:51:21.32 2BBo/yBe.net
数日程度で成果を出す戦略を採用したにもかかわらず何年も戦争が続く
こういうのは圏論に限定されない現象だ
順序を入れかえたら結果が変わる
数日後の情報が今ここに伝わるならそれは時間軸とは言えないぞ
524:デフォルトの名無しさん
24/10/05 14:41:11.81 hOtauQiF.net
>>522
IO a >>= (a -> IO b) -> IO b
は
(IO a >>= (a -> IO b)) -> IO b
であって
IO a >>= ((a -> IO b) -> IO b)
にはならないよ
(>>=)は演算子
525:デフォルトの名無しさん
24/10/05 15:10:26.09 u1hwkRNd.net
圏論の話題出すなよ
Haskellで何か書くにあたって利益があるわけじゃないんだから
526:デフォルトの名無しさん
24/10/05 15:30:46.49 2BBo/yBe.net
利益は道徳よりも軽い
これも、未来予知ができなければ利益を計算できないことに原因がある
527:デフォルトの名無しさん
24/10/05 17:25:54.13 JByJwyk5.net
>>521
役に立つなら、もっと色々入ってるかと…。
私はむしろHaskellより圏論そのものに興味の対象が移って、Haskellは圏論の概念を実際に動かしてみるための道具に成り下がってますね^^;
とはいえ、数学の知識不足なので群論やらトポロジーやらあっちこっち読み漁りながらなので、歩みは遅いですが…。
528:デフォルトの名無しさん
24/10/05 20:22:21.95 J2mQEu2j.net
>>527
面倒でも一般位相の基本、ホモロジーの初歩…と地道にやるのをおすすめします
529:デフォルトの名無しさん
24/10/05 20:30:18.78 aeHKoAMv.net
集合と写像の区別もついてないんだから、集合と位相からやらないとだめ
530:デフォルトの名無しさん
24/10/05 22:07:16.25 JByJwyk5.net
>>528
ありがとうございます。
手探りだったので、助かります。
重点的に勉強してみます。
(高卒にどこまで理解できるか…)
>>529
一応、区別付いてるつもりなのですが…。
指摘していただければ調べてみます。
531:デフォルトの名無しさん
24/10/05 22:16:56.83 aeHKoAMv.net
>>530
あー上で暴れてた人とは別人だったのね
でも、集合と位相は何をやるにしても必要だから頑張ってね
532:デフォルトの名無しさん
24/10/05 23:30:55.73 bPGp2ASj.net
>>373=396=530 っぽいから言うと、(数学に関して)「分かった」「理解した」の自己基準が不安しかない
> ほら、分かってみれば「なーんだ。そんなことか」でしょ?
> なるほど、って感じ。
と自分に言い聞かせていても、ポピュラーサイエンス書感覚で読んだってダメ
他人との議論では、逆に「こいつ分かってないな」と思われるだけだからな
533:デフォルトの名無しさん
24/10/05 23:50:06.63 JByJwyk5.net
>>532
独学ですしね^^;
こいつ分かってないなと思われても良いですよ?
それで指摘されたものも新しい知識になるので。
どうも定義を読むだけじゃイメージ湧かないので、ネット上や数学書の複数の例え話が全て真だと仮定して、共通の特徴からイメージを掴むパターンが多いんです。
534:デフォルトの名無しさん
24/10/06 01:53:03.98 6zQjUfx4.net
いま正常性バイアスを理解した
全て正常だと仮定する
なるほど
535:デフォルトの名無しさん
24/10/06 10:54:18.58 jCq2z3ec.net
本来Haskell使う上で必要のない数学の知識をかじらされるのかわいそう
こうやって無駄に間口狭めてなんの意味があるんだか
536:デフォルトの名無しさん
24/10/06 11:09:45.81 y6HCCYtz.net
>>530に関しては同情すんな
>>373前後で煽っておいて炎上勉強法してる
537:デフォルトの名無しさん
24/10/06 12:50:07.74 6zQjUfx4.net
>>535
だから、具体例をかじることなく一般圏論でやめておこうって言ってるじゃないか
バランスを考えて妥協するとはそういうことだ
538:デフォルトの名無しさん
24/10/06 13:58:19.62 jCq2z3ec.net
まず圏論が必要ないっての
539:デフォルトの名無しさん
24/10/06 14:19:17.49 6zQjUfx4.net
それは極論だがそれを許容する代わりに反対側の極論も許容してもらう
ダブルヘイターとは違うのだよ
540:デフォルトの名無しさん
24/10/07 16:51:22.87 89HfDe1C.net
>>539
君頭悪いなら無理に書き込まないほうがいいよ
541:デフォルトの名無しさん
24/10/08 16:34:43.77 uOPPJ/Hn.net
圏論好きはHaskellよりCPLで幸せになれる
542:デフォルトの名無しさん
24/10/08 19:19:24.66 fXGz3G0z.net
>>529
集合と写像って違うんですか?写像って集合ではなかったですか?
543:デフォルトの名無しさん
24/10/08 19:24:10.23 u3fJk7wa.net
>>541
CPLとは?kwsk
544:デフォルトの名無しさん
24/10/08 19:35:49.07 i8KKt4Pq.net
>>542
反対向きは成り立たないよ
彼はラムダ項みたいなただの集合も関数だとか言ってたんだよ
545:デフォルトの名無しさん
24/10/08 20:00:43.25 fXGz3G0z.net
>>544
なるほど。勉強になります。
546:デフォルトの名無しさん
24/10/08 20:58:36.65 uOPPJ/Hn.net
>>543
CPL (圏論プログラミング言語)
URLリンク(ja.m.wikipedia.org)(%E5%9C%8F%E8%AB%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)
547:デフォルトの名無しさん
24/10/08 21:59:10.54 fIGAPb3c.net
CPL使ったことは一度もないが
関手圏よりもっとややこしい圏で、モナドより凡庸なものを定義するんでしょ
548:デフォルトの名無しさん
24/10/08 23:08:48.38 Fz/Eetv9.net
こんなんだけど
>通常では,自然数などのデータ型は,効率のためにシステムに組込んであるが,CPLでは定義しなければならない.
>また,定義したとしても,機械本来の足し算,かけ算を使用できず,独自に定義しなければならない.
549:デフォルトの名無しさん
24/10/09 00:11:45.00 NBQjGpZO.net
O'CAMLのCAMLはCategorical Abstract Machine Languageの略ということを忘れてはかわいそう。
550:デフォルトの名無しさん
24/10/09 20:31:07.90 UpCIlB6y.net
>>546
Thenks!!
551:デフォルトの名無しさん
24/10/12 20:07:00.42 fyUcodga.net
初心者はStack、ガチムチはCabalで開発するんですか?
552:デフォルトの名無しさん
24/10/15 05:30:10.38 CzVFQLgH.net
みんなStackだよ
Cabalの依存関係解決はましになったとはいえプロジェクト構成の記述はStackのほうがよくできてるし
553:デフォルトの名無しさん
24/10/15 22:34:15.38 2I09ehic.net
詳しい情報サンクス
CabalやめてStackに帰ります
GHCup tuiで選べるCabalやHLSやStackも全部recommendedに落とします
554:デフォルトの名無しさん
24/10/16 05:04:51.74 PvdZsye3.net
ああCabal辞めてStackに移行したらビルドし直しただけでTLSのハンドシェイクがTwitchでは大丈夫なのにツイキャスで失敗する謎の不具合が治りました
やっぱStackすわ
555:デフォルトの名無しさん
24/10/18 18:33:56.50 358zSdqs.net
別に不具合あったわけじゃないならよくね
みんなとか言い出したらそもそもみんなhaskellなんか使ってないが
556:デフォルトの名無しさん
24/10/25 23:46:50.40 jl3K3ThU.net
Haskellを学んだみたいと思うんだけど、「すごいHaskell たのしく学ぼう」って書籍は今でも有用?
Haskellの良書として挙げることは多いと思うけど、出版から10年以上経ってるのが気になった
その間で言語に大きな変更があったとか、「今のHaskellだったらこう書くよね」みたいな注意が必要な点などあれば知りたい
あるいは最近の書籍でよりおすすめというものでも
557:
24/10/25 23:58:48.00 ss1i659U.net
ちょっと古い情報だけど、
僕が「すごいH」を購入したのが2016.12だけど、数年後には章立ての変更まではなかったかもしれないけど、コードの記述など結構アップデートされてたような
いずれにしても、一冊でHaskellを、ってのはアレで、何冊かは読まないとと僕の場合
558:デフォルトの名無しさん
24/10/26 01:14:59.65 jaMDzNJq.net
>>556
ラムダノートのプログラミングHaskell第2版
これを読めばモナドの使い方がわかる
559:デフォルトの名無しさん
24/10/26 13:33:26.33 qze4GRwI.net
モナドはCのポインタより概念が難しいのどうにかならんの
別のはないんですか
560:デフォルトの名無しさん
24/10/26 14:33:50.42 jaMDzNJq.net
ない
別に理論的な部分はすっ飛ばしていいよ
純粋関数型言語で手続き型言語のようなシーケンスをどうやったら書けるか?みたいなパズルを解く方法と思ってればいい
全てはdo記法にため
561:デフォルトの名無しさん
24/10/26 18:20:45.25 QG40CL6R.net
>>559
だったらCleanはどうでせう?
モナドの代わりに線形何たらっての使ってる。
副作用関数を使い捨て関数と捉える概念らしいけど…。
変数は引数のない関数と捉えられるので、入力関数も外部で代入する変数と捉えられる。
んで、
return 0 >>= \x -> return (x + 1) >>= \x -> return (x + 1) = 2
は
return 0 >>= (\x -> return (x + 1) >>= (\x -> return (x + 1)))
と解釈されて、(\x -> ...) 部分が1個のラムダ式(関数)の上に階層構造なので、同名の変数 x はシャドーイングで古い値は隠される。
(そして隠されたら他から参照されなくなるのでGCでメモリを解放される)
IOモナドな入力関数も引数が無いので、値を外部で代入する変数と捉え、シャドーイングで古い値は隠されると考えると、線形何たらの使い捨て副作用関数と同じことしてる。
562:デフォルトの名無しさん
24/10/28 07:23:18.71 duvMwVsG.net
>>557 >>558
ありがとう
まずはラムダノートのプログラミングHaskellを買いました
すごいH本はもう一冊読もうと思って時に買います
563:デフォルトの名無しさん
24/10/28 11:18:21.59 ABlPDVd9.net
すごいエロい本か
564:デフォルトの名無しさん
24/10/28 16:01:27.57 3PX2guVI.net
>>563
それ面白いと思ってレスしてんの?
565:デフォルトの名無しさん
24/10/28 17:13:55.02 B1OBTGXf.net
10年前のtwitterでは鉄板ジョークでしたよ
すごいH
566:デフォルトの名無しさん
24/10/28 19:07:28.37 aKxYxFxQ.net
haskell知らない人はエロ本だと思うし
隠れた卑猥な意味が無ければ
隠語としての価値も無い
567:デフォルトの名無しさん
24/10/28 19:57:49.83 2RuMUG8y.net
ML族のRustが市民権を得た今haskellやる意味ないよ
その時間をRustに当てなさい
568:デフォルトの名無しさん
24/10/28 21:28:05.60 B1OBTGXf.net
平均的HaskellerはRustもやった上でLinearTypes拡張がどうなるか様子見しつつ両方使ってるのでは?
URLリンク(zenn.dev)
569:デフォルトの名無しさん
24/10/28 22:50:50.12 duvMwVsG.net
Haskellスレで言われましても
わざわざカレー屋に来て「ラーメンを食え」って喧伝するようなものでしょ
570:デフォルトの名無しさん
24/10/29 10:29:33.30 2QinlXet.net
>>567
ほんそれ
571:デフォルトの名無しさん
24/10/29 11:58:27.10 IrbjK6II.net
Rustを関数型扱いするやつは
Rustも関数型もまるで理解してない
だから誰も真面目には相手してくれない
572:デフォルトの名無しさん
24/10/29 12:22:05.93 dZcxKFDp.net
そう。世界がHaskellから孤立していく
世界はもっと危機感もった方が良いよ
573:デフォルトの名無しさん
24/10/29 15:30:57.70 +9FvEifI.net
実用プログラムに使った例はあるの?
574:デフォルトの名無しさん
24/10/29 16:00:48.67 FJXFYfo2.net
>>567
MLとは全然ちゃうがな
HM型推論せんやろ
575:デフォルトの名無しさん
24/10/29 22:29:59.15 LPWWq4s4.net
>>573
自分も詳しくはないけど、クローズドな分野が多いんじゃない?
576:デフォルトの名無しさん
24/10/29 23:08:38.64 +9FvEifI.net
>>575
秘密ということ、それじゃわからんと同じことじゃないか
577:デフォルトの名無しさん
24/10/29 23:25:09.95 6SLkDv7J.net
世界は頭悪すぎてHaskellを使いこなせていない
世界はもっと危機感を持った方が良い
578:デフォルトの名無しさん
24/10/30 02:10:51.19 p9nsrTZ/.net
急に主語が大きくなったぞωωω=2πf
579:デフォルトの名無しさん
24/11/02 09:15:14.82 KpOoS8wa.net
クローズドな部分なら使ったうちには入らないな
580:デフォルトの名無しさん
24/11/02 18:11:47.64 3NvQMTDb.net
金融工学で使ってるとこあるかもね
OCamlが定番らしいし
581:デフォルトの名無しさん
24/11/02 19:19:33.26 Mufqfjtq.net
>>580
やはり実務ではフィンテックですか。
このスレで趣味教養的に
数理の応用実験や
アート作品生成プログラム記述用とかで
使ってる香具師いる?
582:デフォルトの名無しさん
24/11/02 19:33:48.22 pIz290+w.net
>>580
みずほでOCamlしか聞いたことない
結局大規模障害出ちゃったけど
583:デフォルトの名無しさん
24/11/02 19:38:33.59 3NvQMTDb.net
>>582
金融商品の設計に使うんだよ
その手の障害とは全く関係ない
584:デフォルトの名無しさん
24/11/02 20:11:17.53 pIz290+w.net
>>581
どっちかというと、教育に興味があって、例えば足し算の足し方が増加と追加って2種類あるんだけど、追加は後から増えるって意味だと教科書に書いてあるけど、その説明がもやもやする。
それで、違いを考えるとこれは
増加の足し算:末尾再帰。その場で簡約出来る
3 + 2 = (3 + 1) + (2- 1) = 4 + 1 = (4 + 1) + (1 -1) = 5 + 0 = 5
追加の足し算:再帰。基底部まで来てから簡約開始。リストの ++ 演算子的な動き。
2 + 3 = 1 + ((2 - 1) + 3) = 1 + (1 + ((1 - 1) + 3)) = 1 + (1 + (0 + 3)) = 1 + (1 + 3) = 1 + 4 = 5
みたいに、足し算作らないと気付かない違いを気付いて教えるのに役立ててる。
(+1/-1の代わりにsucc/pred関数の適用で考えた方が分かり易いかも)
585:デフォルトの名無しさん
24/11/02 20:16:43.59 pIz290+w.net
>>583
そうなんだ。
そういうライブラリ頼みっぽい事なら、MathmacticaとかPythonのが良さそうなのにね。
金融商品だったら統計に強いRだってあるし。
なぜわざわざOCamlだったのやら…。
586:デフォルトの名無しさん
24/11/03 11:40:35.68 kGU90lSm.net
>>584
本スレ誘導
スレリンク(tech板)
587:デフォルトの名無しさん
24/11/03 17:33:41.03 4RaSizfZ.net
その手のはかなり昔からの話だしその頃pythonはそんな一般的ではない
588:デフォルトの名無しさん
24/11/03 18:58:10.27 W/WQS3jI.net
>>586
え…。
Haskellを何に使ってるか聞かれたから答えたのに、そりゃ無いよ。
589:デフォルトの名無しさん
24/11/06 18:53:34.69 s8sk505y.net
semigroupoidsのAltからFunctor抜いたやつないのかな
catsのSemigroupK相当のやつ
590:デフォルトの名無しさん
24/11/07 02:17:24.00 w1FRCcDr.net
HackageもHaskellWikiもつながらねえ
攻撃でも受けたか
591:デフォルトの名無しさん
24/11/07 06:45:43.72 NVSipRlq.net
数か月前もHoogle繋がらなかったしね…。
592:デフォルトの名無しさん
24/11/09 18:32:16.19 r4DlAvJp.net
mylist.py TotalSeconds : 6.1246778
1:def mylist(n, m):
2: a = 1
3: outer = []
4: for _ in range(0, n):
5: inner = []
6: for _ in range(0, m):
7: inner.append(a)
8: a += 1
9: outer.append(inner)
10: return outer
11:
12:print(mylist(6000, 8000)[-1][-1])
上と同じ動きのコードを書いたけど、
アルゴリズムとしてはPythonと同じmylist.hsのコードが良いはずなのに、
どっちも最適化するとmylist2.hsのが良好。
(ファイル名の横の秒数は実行時間)
mylist.hs TotalSeconds : 4.107899
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.f $ [1..]
4: where f ns = xs:f ys
5: where (xs, ys) = splitAt m ns
mylist2.hs TotalSeconds : 2.3916408
1:main = print.last.last $ mylist 6000 8000
2:
3:mylist n m = take n.iterate f $ [1..m]
4: where f = map (+m)
593:デフォルトの名無しさん
24/11/09 18:32:43.47 r4DlAvJp.net
mylist2.hsのアルゴリズムは
f = map (+3)とすれば
[1,2,3]
[4,5,6] -- f [1,2,3] = [1 + 3, 2 + 3, 3 + 3] = [4,5,6]
[7,8,9] -- f (f [1,2,3]) = f [1 + 3, 2 + 3, 3 + 3] = [4 + 3, 5 + 3, 6 + 3] = [7,8,9]
と、行数が増えるごとに関数の適用回数が増えるので本来なら遅いはずですが、
考えるに直前の結果をキャッシュする様な最適化が施された模様。(-O3)
(そうすると、mylist.hsのsplitAtの方がボトルネックになる?)
最適化なしでのコンパイルはしてないので、
もしかしたらiterateの中身自身がキャッシュするように改良されたのかも。
594:デフォルトの名無しさん
24/11/10 16:05:22.18 AfmJKCJ3.net
これ数学的にどういうことなのか
かいつまんで教えてくらまいか
watch?v=dYj0rPQeRkA
595:デフォルトの名無しさん
24/11/16 10:08:07.70 9CYVpzbn.net
Category Theory Using Haskell
An Introduction with Moggi and Yoneda
Shuichi Yukita
という書籍が来月出るんですって?
596:デフォルトの名無しさん
24/11/16 14:32:48.68 Avgm411i.net
>>595
高いな
> Hardcover
> \36,125 Tax included
597:596
24/11/16 14:36:30.07 Avgm411i.net
円記号がバックスラッシュになっていたので訂正
¥36,125
フォントによるわけだが
598:デフォルトの名無しさん
24/11/16 15:13:06.50 ZnREBqGy.net
買って損するだけの高額本の予感
599:デフォルトの名無しさん
24/11/16 15:27:44.60 x85mVkLf.net
なんだ雪田の本じゃねぇか
プラスアルファはあるかも知れんが
基本雪田の「圏論入門 Haskellで計算する具体例から」と大差無いと思うぞ
600:デフォルトの名無しさん
24/11/16 20:50:43.88 ZUJ+jDQV.net
結局Moggiのアイディアがなんなのか書いてなかったから、洋書でも同じでしょ。
601:デフォルトの名無しさん
24/11/16 21:01:44.68 UsNa54E4.net
すでに書かれてるのがwikipediaにあるじゃん
URLリンク(ja.m.wikipedia.org)
602:デフォルトの名無しさん
24/11/16 21:18:48.47 ZUJ+jDQV.net
wikiのは肝心のvalueとcomputationについてちゃんと書いてない。
computationの訳を「計算された値」とするのは微妙。
603:デフォルトの名無しさん
24/11/16 21:28:16.06 ZUJ+jDQV.net
『圏論入門』の方にはvalueもcomputationも書いてなかったと思うから言わずもがな。
604:デフォルトの名無しさん
24/11/16 21:43:11.16 HNcchqjT.net
出たら人柱になって買って読んで下さい
605:デフォルトの名無しさん
24/11/16 22:29:43.38 MlIU4R6X.net
多分加筆してると思うよ
日本の出版社はなぜかページ数制限があることが多いんだけど
海外にそれはないし
606:デフォルトの名無しさん
24/11/16 22:41:34.37 ZUJ+jDQV.net
加筆してvalueとcomputationの説き起こしから始めて本当にMoggiのアイディア書くかなぁ?
米田の補題が工学応用できるとかいう主張と衝突する気がするんだけれど。
607:デフォルトの名無しさん
24/11/17 08:11:12.88 RK7ri1yG.net
レポよろ
608:デフォルトの名無しさん
24/11/17 09:07:13.97 zx90fdBd.net
ぷりぷりです
609:デフォルトの名無しさん
24/11/17 14:35:29.88 895B27h0.net
4万近く出してわざわざレポだけする奴なんているの?
圏論入門と同じでそれらしいキーワードだけ出して終わりの可能性高いのに。
610:デフォルトの名無しさん
24/11/17 19:34:30.56 A63wUj4E.net
まぁそもそもHaskellで圏論持ち出す必要ないしな
生産性上がらないよ
611:デフォルトの名無しさん
24/11/17 19:42:07.02 bAlb8WtH.net
Haskell、コーダー界隈で圏論勉強会が流行していた時期、あれは何だったのか?
612:デフォルトの名無しさん
24/11/17 20:00:10.23 895B27h0.net
圏がグラフの拡張みたいな概念だったから、グラフ理論みたいに有用なプログラミングにつかえるアルゴリズムがあるんじゃないかってことでやってたように見えた。
モナドも説明したかったようにみえたけど、結局圏論の勉強を踏まえた説明はでてこなかった。
613:デフォルトの名無しさん
24/11/17 21:17:15.64 U7PWp5lE.net
>>611
俺も行ってたわw
数学クラスターからの圏論マウントを喰らっていくのやめたがw
そういうやつ多いんじゃないか
614:デフォルトの名無しさん
24/11/20 04:56:53.37 vcDCbnyw.net
プログラムは合成できないといけないって当然のことを、いちいち圏である必要があるとか言い換えるオレ天才だわー
615:デフォルトの名無しさん
24/11/20 18:55:46.60 QVKMRnqI.net
URLリンク(dic.nicovideo.jp)
616:デフォルトの名無しさん
24/11/21 00:16:43.88 r2/mXbdf.net
集合論と圏論の抽象度がもし同レベルならたしかに圏である必要はないな
必要ない情報は捨象されるべきだと言われれば何も反論できない
だから抽象化マウントは強いんだ
617:デフォルトの名無しさん
24/11/21 01:45:46.56 bAf4oZLa.net
抽象化すればプログラムしにくいと思うけど
618:デフォルトの名無しさん
24/11/21 19:02:52.56 fTdZV0pc.net
プログラムが圏になるためとかいうクソしょうもない理由がモナド導入の理由って本当か?
圏論っていうか圏じゃん。モノイド構造も米田の補題もなにも出てこないんだが
619:デフォルトの名無しさん
24/11/21 21:57:07.56 r2/mXbdf.net
型構築子を導入すれば関手もモナドも勝手についてくる
型を必要とするすべての言語で同じことが言える
これも抽象化
620:デフォルトの名無しさん
24/11/28 10:04:33.91 p2Q1UON9.net
haskellでスクレイピングがやりたいんだが
arch linuxのリポにはscalpelがない
別言語でやったほうがいいかな?
621:デフォルトの名無しさん
24/12/04 21:11:42.90 D3PBVzJs.net
ディストリで全部パッケージ化してくれてるとは思えん
stackかcabal入れて自分で管理するんじゃね?
ローカルに1GBくらいのライブラリ入るし重複しないようにしないといかんが
もちろんseleniumとか使うにしてもpythonとかrubyのほうが楽やろ
622:デフォルトの名無しさん
24/12/08 23:12:57.17 G2o8fSXB.net
おおむね10^-300前後(-400乗は無理だった)精度の任意精度少数。
定義済みの中ではPico(10^-12)までは定義されてる。
下の定義のE300/10^300/F300を書き換えれば任意精度の浮動小数型が作れる。
(F300がPicoとかNanoとかの型)
ただし、pi/sin/sqrtなどの倍精度/単精度の浮動小数型用関数/定数が使えなくなるので四則演算を駆使して自作する必要がある。
import Data.Fixed
data E300
instance HasResolution E300 where resolution _ = 10^300
type F300 = Fixed E300
623:デフォルトの名無しさん
24/12/19 15:03:02.64 NXRHTsH0.net
add (x,y) (a,b) = (x+a,y+b)
これをaddを定義せずにarrowで簡単にかく方法はありますか
624:デフォルトの名無しさん
24/12/19 16:15:15.91 hCGKCs/t.net
arrowてなんすか
625:デフォルトの名無しさん
24/12/19 19:27:09.72 gIJYmlNm.net
富士通のスマホ
626:デフォルトの名無しさん
24/12/20 01:32:43.30 /9ZUXmih.net
スマホでHaskellを簡単に書く方法はないかな
627:デフォルトの名無しさん
24/12/20 02:01:04.72 I9azuXSK.net
>>626
今はキミの言うところの「簡単」ではない環境で書いてるってこと?
628:デフォルトの名無しさん
24/12/20 02:04:07.41 /9ZUXmih.net
>>627
だまらっしゃい
俺がウザ絡みするのは良いけどアンタにレスつけてウザ絡みする権利はないんだよ
何故ならアンタは世界で一番価値のない存在だからね
629:デフォルトの名無しさん
24/12/20 15:54:59.07 IOWVZ3it.net
スマホでHaskell書く必要ある?
ないよね
630:デフォルトの名無しさん
24/12/20 22:08:57.75 uE9QxZQG.net
>>626
iOSならRaskellってアプリあるけど、開発止まって大分経つので画面がずれたりする…。
ideoneとかpaiza.IOとかのクラウドサービスが今のところは一番手軽かもね。
631:
25/01/08 22:25:29.83 lvne7rNk.net
初学者のため、言葉の定義があいまいな部分はご容赦ください
IOモナドの純粋性についてですが(すでに言葉があやしい)、
実際に副作用が起こるのは、mainに束縛され実行されたり、ghciプロンプトからアクションを投入したときで
アクションを生成するまでは同じ入力に対してはつねに同一のアクションを出力するという意味で純粋であるという理解でよいでしょうか(まだ実行前なので、副作用は生じていない)
アクションを生成するまでが純粋
ただ、このときの純粋性の有り難みがさっぱり分からず…
純粋な関数が遅延評価などに有効なことや、副作用のある処理が >>= などで順序を拘束しなければならないことは分かるのですが
632:デフォルトの名無しさん
25/01/09 20:13:21.93 xwwTGWUu.net
評価が全部終わった後じゃないと参照透明性が保証されない。
633:デフォルトの名無しさん
25/01/09 20:18:47.77 xwwTGWUu.net
規制あったはずなんだけどなんか書き込めた。
アクションの生成が完了(コンパイルの終了)。この時点ではみんな純粋。
その後に、アクションの実行(プログラムの実行)が起こって入出力が出る。
アクションの生成時点まですべての関数が純粋関数だということは参照透明性が保証されるということで、ありがたみはその一点にあると思うが。
634:デフォルトの名無しさん
25/01/09 21:49:19.20 31eIYKLT.net
異教徒は汚染物として分離隔離する思想
635:
25/01/09 22:58:50.93 vav7Znkh.net
>>632-633
ありがとうございます >>631 です
あくアクションの生成までが純粋、でよいことを確認させていただきました
でもこれって、Cだろうがアセンブラだろうが、(厳密には違うかもしれませんが)同じソースコードをコンパイル(アセンブリ)すれば同じオブジェクトファイルが生成されるのと何が違うのだろうかと
>>634 にある分離隔離のような、何かこう、これまでとは違う何かがあるはず…と、浅知恵で考えるから訳が分からないのです…
636:デフォルトの名無しさん
25/01/09 23:09:19.47 2G6IUNoe.net
>>634
おパンツ分解されたオペラッドのおパンツの中で脱糞してもズボンの裾のお股のどっち側からウンコが転げ出てくるのかわかんないだけかと思ってた。
637:デフォルトの名無しさん
25/01/09 23:34:59.91 xwwTGWUu.net
>>635
>でもこれって、Cだろうがアセンブラだろうが、(厳密には違うかもしれませんが)同じソースコードをコンパイル(アセンブリ)すれば同じオブジェクトファイルが生成されるのと何が違うのだろうかと
だから参照透明性の保証だって。オブジェクトファイルとしては状態変化とかしているけれど、元のHaskellコードとしては参照透明性は保たれている、そこがすごいということなんだし。
逆に普通のオブジェクトファイルと全く違うなんてことありうると思う?同じコンピュータ上で動くんだからオブジェクトファイルとしては変わらんだろ。
638:
25/01/10 09:27:26.71 N8eMPB8m.net
>>637
レスをありがとうございます
参照透過性の保証、ですね
アクションを実行し、副作用が起こる前なので当然だ、という解釈は誤っているでしょうか
まだ本の上の字面を追って学んでいるだけで圧倒的にコーティング量が足りない状態なので、これから経験を積むうちにいつかスッと腑に落ちるときがくるのかもしれません
639:デフォルトの名無しさん
25/01/10 10:01:16.98 xLB3XHZu.net
必要呼び評価戦略を採用するための前提として、すべての式の参照透過性が要求されるというだけでは
640:デフォルトの名無しさん
25/01/10 18:54:00.90 X+hiLHcK.net
>>638
>アクションを実行し、副作用が起こる前なので当然だ、という解釈は誤っているでしょうか
?なんか混乱しているんじゃないか。
アクションの生成時点でのHaskellコードの参照透明性と、オブジェクトコード実行の際の参照の処理は別物だぞ。
641:デフォルトの名無しさん
25/01/10 18:59:59.95 X+hiLHcK.net
補足:
Haskellコンパイルは少なくとも次の二つの段階を持つ
1.アクションの生成(入出力指示書の生成、Haskellコードの字面のコンパイル)
2.アクションの実行
1.のアクションの生成時に参照透明性がHaskellコードとして保証されている。
アクションの生成で必要な参照行為は全て終わっているので、2.では入出力だろうが破壊的操作だろうがやっても文句を言われない。
IOの機構がすごいのは1.アクションの生成計算で参照透明性が保証されているというところがうれしいところ、だという話。
642:デフォルトの名無しさん
25/01/10 19:16:07.13 NIbIyPdh.net
一度死んだら復活は有り得んので注意な
643:
25/01/10 19:39:05.74 N8eMPB8m.net
>>640-641
レスをありがとうございます
そうですね
表現がいけませんでしたが、そのように理解しています
あとひとつ伺いたいのが(アドバイスいただいたことがまだちゃんと理解できたわけではないのでアレですが)、
参照透明性が担保されているとは、(1.アクションを生成する時点までは)副作用がある処理は書くことができない、ということでしょうか
644:
25/01/10 19:48:40.81 N8eMPB8m.net
>>643 ですが、
このレスはちょっと意味が分かりませんね
実行前なので副作用は怒りようがありませんね
645:デフォルトの名無しさん
25/01/10 20:01:13.00 X+hiLHcK.net
>>643-644
そのように理解しています。って本当に理解してるか?
アクションの生成において生成しているのは入出力の指示書みたいなもので入出力自体はない。
こういう入力があったらこういう計算方法でこういう出力をするみたいな手順を生成しているだけ。
なんで参照透明性が担保されているというところでそんな引っかかるんだ?
646:
25/01/10 20:34:59.37 0gelnbg2.net
>>643 で確認したかったことは次のようなことでした
アクションを生成する段までは副作用なく、同一のプログラムを入力とすれば、かならず同一のアクションが出力されるか
ということでした
それはそうであるように思います
647:デフォルトの名無しさん
25/01/10 20:42:16.47 X+hiLHcK.net
同一のプログラムを入力とすればってどういう意味?
前も言ったようにアクションの生成とアクションの実行は別フェーズ。同一のアクションが出力される、というのはどっちのフェーズでのことを言ってんの?
648:
25/01/10 21:16:13.66 0gelnbg2.net
アクションが出力される、なので 1.です
649:デフォルトの名無しさん
25/01/10 21:34:10.26 X+hiLHcK.net
なんか理解しているのかすごい怪しいなぁ。
一応回答しておくと、アクションの生成のフェーズなら参照透明性を保証された純粋関数の計算でしかないから
main文が同じなら当然同じアクションが生成される。
同じプログラムなら生成されるものも同じという意味で。
理解してたらこんな話出てこないと思うんだけど。
650:
25/01/10 22:49:49.12 /2hXYNXu.net
>>649
重ね重ね、ありがとうございます
理解できているかいなかについては、理解が浅いため、確認のために伺わせていただいています
伝わりづらくて申し訳ありませんでしたが、>>649の内容のような理解で正しいかを確認したかったというのが趣旨でした
簡潔に表現していただいて助かりました
651:デフォルトの名無しさん
25/01/13 17:46:46.07 uTEEqnKb.net
あけなしておめでとうございます
去年は多様性がようやく否定され始めた年ですが、
今年はhaskellの純粋主義のやうに分類・隔離・排除躍進の年となるようがんばりましょう
652:デフォルトの名無しさん
25/01/15 00:44:26.65 O9bWSOqU.net
マクロな現象には個々人のばらつきを否定する力はない
逆に個人は10回連続でグーを出してみてもたとえば「正規分布に従う」とかなんとかいう法則を反証できない
ミクロとマクロを隔離したのはただの統計学であって純粋でも主義でもない
653:デフォルトの名無しさん
25/01/15 05:29:17.90 QElBeHY8.net
誰もいまミクロ・マクロの話なんてしてないぞ
654:デフォルトの名無しさん
25/01/21 22:22:46.92 QQz8h7YM.net
雪田の英語版買って読んだ勇者はおらんか?
655:デフォルトの名無しさん
25/01/22 01:14:29.67 SDQT/604.net
3万も出してよもうとは思わない。
目次読むとKleisli tripleの節はあるのにKleisli categoryの節がなかったり、なぜかその後にMoggi's theoryが出てきたりと
少なくとも構成があんまりいい感じはしない。
656:デフォルトの名無しさん
25/01/22 03:57:21.12 ydcqGqD9.net
まぁ圏論はHaskellやるうえで無駄だしな
657:デフォルトの名無しさん
25/01/23 21:00:49.82 j8NlocC3.net
しかもHaskell自体やるだけ無駄だしな
658:デフォルトの名無しさん
25/02/13 07:10:20.44 NHs8kkcw.net
wikiでghc見たら、中の人MSリサーチにいるのな。
最近C#並みに速くなったと思ったら、そういう事か。
納得。
659:デフォルトの名無しさん
25/02/13 13:53:19.78 LmH89MFs.net
暗記系の問題が嫌われるのは答えを隠す意味がないからだが
逆に陰謀論が大人気なのは、隠蔽する動機があるからかもしれない
660:デフォルトの名無しさん
25/02/13 19:59:58.08 8vmF21CT.net
>>659
誤爆か?
次から気をつけな
661:デフォルトの名無しさん
25/02/13 21:57:13.74 FvaixK+o.net
わざとだろ。
数板に延々スレ違を書き込む基地外がいるが多分そいつと同一。
662:デフォルトの名無しさん
25/02/13 22:11:56.50 LxUFvhMj.net
ワードサラダくん数学板にもいるんか
まあいそうな板だな
663:デフォルトの名無しさん
25/02/13 23:39:39.86 LmH89MFs.net
有意味な事実と有意味なデマを隔離するのは難しいらしい
だが、真でも偽でもないナンセンスはなぜか瞬時に判断できる
664:デフォルトの名無しさん
25/03/19 11:03:50.18 JUfTLTVZ.net
IntSetのsizeがO(1)じゃなくO(n)なのはなぜですか、O(1)で実装できそうなもんですが
665:デフォルトの名無しさん
25/03/19 19:45:13.59 4qyoYSYb.net
unionとかで重複要素数えるのが面倒だから必要になるまで数えない
666:デフォルトの名無しさん
25/03/19 20:51:01.02 S6mpqhEQ.net
私は最強ーーすき
667:デフォルトの名無しさん
25/03/19 20:52:16.86 S6mpqhEQ.net
誤爆スマソ。懐メロチャンネルと間違えた
668:デフォルトの名無しさん
25/10/08 08:47:56.03 66xUgFQM.net
int* map(int (*f)(const int), const int* array, const int n){
int* p = malloc(sizeof(int) * n);
for(int i = 0; i < n; i++) p[i] = f(array[i]);
return p;
}
ふむ、メモリ管理が必要な言語が(見かけ上)副作用のない関数を作ろうとしたら配列を返す関数の時点で関数を使った後は必ずメモリの開放が必要になるのか。
開放が必要だから、参照を持つためにポインタへの保存が必須なので、関数の連続適用(関数合成)は絶望的。
これじゃ、GCやRustみたいな仕組みが必要になるわけだ。
669:デフォルトの名無しさん
25/10/08 10:40:05.18 qRy2t+J8.net
Cで副作用はいうてらんないね。マルチスレッド、再入可能にするところまで出来れば上出来
670:デフォルトの名無しさん
25/10/08 13:07:06.38 4LSFWHe4.net
>>668
30点の理解
671:デフォルトの名無しさん
25/10/08 14:05:41.01 JTvRYaZp.net
GC言語はGC使ってる時点で副作用あるやんw
メモリ管理他人任せにしてるだけだ
672:デフォルトの名無しさん
25/10/08 17:42:33.77 1ctt2fBW.net
>>671
-30点
673:デフォルトの名無しさん
25/10/08 18:32:01.08 66xUgFQM.net
>>670
100点満点のご高説をどうぞ。
長文になっても良し。
>>671
実は純粋関数型言語の定義は「副作用も含めて参照透明性が破れていない」なのです。(Wiki調べ)
print関数やgetLine関数はどう見ても副作用有るでしょう?
でも、モナドのお陰で参照透明性は破れてないんですよ。
674:デフォルトの名無しさん
25/10/08 18:44:02.95 N7mcxj5n.net
副作用は隔離スレへ
675:デフォルトの名無しさん
25/10/08 18:45:31.77 HFQA1hQ+.net
なるほどモナドと書き込めばこのスレで副作用の話もできるのですね
676:デフォルトの名無しさん
25/10/08 23:41:30.24 jkiZK6Mq.net
>>673
ゴールがわからないので100点のご高説は無理だが30点の理由は説明しといてあげる
C言語という特定の言語実装における制約がメモリ管理が必要な言語全般に対しても当てはまると考えてるのが根本的な間違い
>配列を返す関数の時点で関数を使った後は必ずメモリの開放が必要になるのか。
>>668のコードで(明示的な)メモリ解放が必要になるのはヒープに動的にメモリをアロケートしたからであって配列を返すからではない
C言語では配列がfirst classではないので配列をそのまま返すことは不可能
C言語でも構造体ならfirst classなので配列という概念を表現した構造体を作って静的配列を返すようにすれば(明示的な)メモリ開放は不要
C言語にはないがジェネリック等の抽象化機構を備えた言語であれば静的配列を使って任意長の配列に対するmap関数も書ける
>開放が必要だから、参照を持つためにポインタへの保存が必須
動的にアロケートするものは実行時になるまで必要なメモリサイズがわからないから言語に関係なくポインタ的なものでしか表現しようがない
動的にアロケートしたものだからポインタが必須、ヒープに動的にアロケートしたものだから後で(明示的な)開放が必要なのであって、開放が必要だからポインタへの保存が必須という因果関係ではない
677:デフォルトの名無しさん
25/10/09 02:23:13.64 j1OYGPg+.net
>>676
確かにメモリ管理が必要な手続き型言語全般というのは広げすぎたかもしれない。
静的な配列を関数内で作ってポインタを返す形で作ると関数を抜ける際に配列の寿命が尽きる。
(通常、それを避けるために結果を格納するためのポインタを引数で渡す)
C言語で関数型言語のmap関数みたいな配列を返す関数が作れるか?と考えると動的に作って、使い終わったら解放する形になるのかなと。
ここへの書き込みが長すぎると怒られたので削除したが、構造体で包むという案も考えた。
値渡しだからコピーコストがかさむ。
参照渡しだと生の配列と同じ寿命の問題に突き当たる。
678:デフォルトの名無しさん
25/10/09 10:26:59.37 DbxsJTmB.net
>>677
>値渡しだからコピーコストがかさむ。
コンパイラの最適化で不必要なコピーは消える
C言語でもそういうことは当たり前にやってる
679:デフォルトの名無しさん
25/10/09 11:59:08.62 4MZdWW58.net
仕様化されてるっけ
コンパイラの実装次第だと怪しい
680:デフォルトの名無しさん
25/10/09 17:36:59.11 jE8FE7Nk.net
Cに何を求めてんだよw
681:デフォルトの名無しさん
25/10/09 17:53:09.88 N3YUsGEr.net
OS開発ですね。メモリも割り込みも何でも見えてしまい、扱わないといけません
682:デフォルトの名無しさん
25/10/09 18:19:20.69 j1OYGPg+.net
>>678
にゃんと!?
それを押してもいざ実装してみたら
構造体で配列を包む場合、あらかじめ配列の長さを決めないといけなかった。
struct {
int array[1024];
int size;
}typedef Array;
この1024とかも余分な分は最適化で無くなるっていうなら10万位要素があっても大丈夫なように1GB位(見かけ上)確保したいが、そうでないなら大体の場合、無駄な領域を確保してることになる。
683:デフォルトの名無しさん
25/10/09 18:28:04.54 j1OYGPg+.net
>>678
ん、まてよ?
最適化で不要なコピーは消えるって言っても、関数プログラミングのmap関数と同じ動きなら、参照元の値は変わったらダメなので参照渡しされたら困るんだが、どんな最適化でコピー(値渡し)で無く、かつ参照渡しでもない状態ってどんな状態?
684:デフォルトの名無しさん
25/10/09 19:31:35.47 XykzCJ/G.net
Haskellは遅延評価だからmapが配列を返してると言えるかあやしい
一般的な関数型言語だと末尾再帰で不必要になる値を再利用(上書き)する
あと値が変更されない(immutable)なら参照渡しで共有しても問題ないし
共有するためにimmutableにすると言っても過言ではない
685:デフォルトの名無しさん
25/10/09 19:50:16.02 j1OYGPg+.net
>>684
うん、遅延評価だから基本参照を返してるはず。バード本参照
(なので>>668を書いてみたわけで)
immutableなら
a = [1..4]
b = map (+1) [1..4]
print a
print b
とうコードで
output:
[0,1,2,3,4]
[1,2,3,4,5]
になるはず。
Cで参照を共有すると
[1,2,3,4,5]
[1,2,3,4,5]
という困った表示になってしまう。
というかHaskellでも生のリスト[0..4]とmap (+1) [0..4]は参照を共有してない。
共有してるのは[0..4]だけ。
(むしろ共有してないからこそ「富豪プログラミング」とか言われる)
686:デフォルトの名無しさん
25/10/09 20:01:16.79 j1OYGPg+.net
言ってみればHaskellは新しい参照をどんどん生み出して、不要になった参照はガンガンGCする。
Cはそういうプログラミングには(当たり前だが)向かないし、当たり前にCの方が効率は良い。
人間が書くコードはHaskellみたく数学に近いほど短くなる。
どっちが良いとかじゃなく、何を優先するかという話。
(なのだなぁと、Cでmap関数もどきを書いて再確認した)
687:デフォルトの名無しさん
25/10/09 20:33:26.39 N3YUsGEr.net
ループ書こうぜ
688:デフォルトの名無しさん
25/10/09 21:58:50.95 HS++2zZ0.net
>>682
「ジェネリック等の抽象化機構を備えた言語であれば~」のところ全然理解してなかったのな
>>683
言語の仕様上は値渡しだけど実際にわざわざコピーして渡す必要がない状況ならコンパイラが最適化してコピーしないマシンコード(コピーして渡すのと同じ結果になるマシンコード)を生成するという話
異なるレイヤーを混同してることに気づいてくれ
あとHaskellのリストは配列じゃないよ
689:デフォルトの名無しさん
25/10/10 05:32:34.82 WzZmvOuY.net
Haskellを勉強したけど何に使えばいいのか分からない
関数型プログラミングで難しい割に、速度が出ないことがわかっているやっぱり速度は正義だろ
690:デフォルトの名無しさん
25/10/10 07:17:31.85 G/tXieG5.net
>>688
ジェネリックはそのうちC++なりJavaなりで試すけど、まだ試してもいないので…。
最適化の方はもうちょい具体的に教えて欲しいかも。
x = 2 * 100を x = 200にするみたいなのは知ってるけど、あんま詳しくない。
691:デフォルトの名無しさん
25/10/10 07:21:42.77 G/tXieG5.net
>>689
今のHaskellは(中の人がMSに勤め始めてから)C#並みに速くなってるけど、GUIライブラリとか軒並み遅い時代に開発が止まってる…。
しいて言えばYesod使ってWebアプリかな?
Mac(Appleシリコン)版があるからiOSアプリのロジック部分とかも行けそう。
692:デフォルトの名無しさん
25/10/10 20:26:02.07 OD0KmsJp.net
【移民】 は努力もせずに日本の豊かさを手に入れる
スレリンク(kankon板)
URLリンク(o.5ch.net)
693:デフォルトの名無しさん
25/10/11 22:42:46.58 pZv0dAV3.net
22 template <typename T>
23 vector<T> map(function<T(T)> f, const vector<T> arr){
24 vector<T> temp;
25 for(auto i : arr) temp.push_back(f(i));
26 return temp;
27 }
694:デフォルトの名無しさん
25/10/11 22:43:04.64 pZv0dAV3.net
C++で書いてみた。
今回は値渡しにしたけど、本当に最適化でコピーにならないようにできるのかな…。
そもそもどうやってそれを確認するんだろう?
本当なら参照渡しがほぼ要らなくなるけど。
そして、例によって参照渡しだと>>668やコードこそ書いてないがCで一般的な>>677のカッコ内に書いた(通常、それを避けるために結果を格納するためのポインタを引数で渡す)になる。
コードにするとこう。
(Haskellerなのでmapにしたけど、C++だとmapって連想配列なのね。失敗した…)
void map(vector<int>* input, vector<int>* output);
配列と比べて長さを引数に渡さないで良くなるのと、realocしなくても長さを変更できる点が進化しているが。