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/
460 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 00:20:32.36 ID:XlY0VH6O.net] Complex RationalにNumのinstance宣言できないかと思って以下のようにしてみました instance Num (Complex Rational) where (x:+y) + (x':+y') = (x+x') :+ (y+y') (x:+y) - (x':+y') = (x-x') :+ (y-y') (x:+y) * (x':+y') = (x*x'-y*y') :+ (x*y'+y*x') negate (x:+y) = negate x :+ negate y abs z = undefined signum z@(x:+y) = undefined fromInteger n = fromInteger n :+ 0 結果以下のようにそれは無理と怒られます 何かてはないでしようか? Haskell Online Compiler [ghc-8.4.4] Copyright (c) The University of Glasgow Compiling your program... [1 of 1] Compiling Main ( prog.hs, prog.o ) prog.hs:7:10: error: • Illegal instance declaration for ‘Num (Complex Rational)’ (All instance types must be of the form (T a1 ... an) where a1 ... an are *distinct type variables*, and each type variable appears at most once in the instance head. Use FlexibleInstances if you want to disable this.) • In the instance declaration for ‘Num (Complex Rational)’ | 7 | instance Num (Complex Rational) where | ^^^^^^^^^^^^^^^^^^^^^^
461 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 11:01:46.76 ID:rDcCtqL6.net] 知らんけどコンパイラの言う通りFlexibleInstances使ったら?
462 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 13:16:55.43 ID:m1GQ7XMv.net] 意味も分からずコンパイラの指示に従ってばかりいても、 初心者の域は抜けられない でも、コンパイルできなきゃモチベーションが下がるから、 取りあえず従っとけ
463 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 17:00:23.04 .net] でた!おまじない!
464 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 17:10:43.28 ID:rDcCtqL6.net] 標準のhaskellだと instance 型クラス 型構築子 instance 型クラス (型構築子 型変数1) instance 型クラス (型構築子 型変数1 型変数2) … って形式のインスタンス宣言にしか対応してないからな instance 型クラス (型構築子 型構築子) って書きたいなら言語拡張使えって言われる 言語拡張使うか、あるいは、もっと一般的なインスタンス宣言 instance Num a => Num (Rational a) とかにしたら?
465 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 18:26:13.20 ID:mkAi3PX1.net] 皆さんご助言ありがとうございます 実は家のパソコン壊れててHaskellはオンラインHaskellコンパイラというので当座を凌いでるんですがコレコンパイラオプションもインラインプラグマ?とかいうのも使えないっぽくてFlexible Instanceとか使いたくても使えないんです Num Rationalは標準で入ってます 入れられなくて困ってるのはNum (Complex Rational)なんです Num a=>Num (Complex a) は二重定義でダメだと怒られます prog.hs:55:12: error: Duplicate instance declarations: instance Num a => Num (Complex a) -- Defined at prog.hs:55:12 instance RealFloat a => Num (Complex a) -- Defined in ‘Data.Complex’ | 55 | instance Num a => Num (Complex a) where | ^^^^^^^^^^^^^^^^^^^^^^^^
466 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 18:28:35.47 ID:mkAi3PX1.net] しょうがないのでとりあえずComplex Rationalを“カプセル化”してみました 複素座標0,3,4i,7/2+7/2iである4点が同一円周上にあるか確認するプログラムです 同じ事をComplex Floatとかでやると丸め誤差で誤判定してくれます できるんですがちょっと不愉快ですね
467 名前:デフォルトの名無しさん mailto:sage [2020/08/31(月) 18:28:47.62 ID:mkAi3PX1.net] import Data.Ratio import Data.Complex data ComplexRational = CR (Complex Rational) deriving (Show,Eq) instance Num (ComplexRational) where (CR (x:+y)) + (CR (x':+y')) = CR $ (x+x') :+ (y+y') (CR (x:+y)) * (CR (x':+y')) = CR $ (x*x'-y*y') :+ (x*y'+y*x') negate (CR (x:+y)) = CR $ negate x :+ negate y abs = undefined signum = undefined fromInteger n = CR $ fromInteger n :+ 0 instance Fractional (ComplexRational) where recip (CR (x:+y))= CR $ (x/(x^2+y^2)):+(-y/(x^2+y^2)) toComplex (CR x) = x i = CR $ 0:+1 onCircle a b c d = (==0) $ imagPart $ toComplex $ ((a-c)/(b-c))/((a-d)/(b-d)) a=0 b=3 c=4*i d=7/2+7/2*i main = do print $(1/2+3/4*i)/(5/6+7/8*i) print $ onCircle a b c d ----- CR (618 % 841 :+ 108 % 841) True
468 名前:デフォルトの名無しさん mailto:sage [2020/09/03(木) 16:35:31.39 ID:VDk3Uebh.net] すごいHaskell、7章を読んでいますが、正直、重要ではあるが面白くない内容なので読むペースが遅くなってしまっています。 最後まで読み切ろうと思います。
469 名前:デフォルトの名無しさん [2020/09/03(木) 16:55:07.23 ID:VDk3Uebh.net] 図書館にリクエストした以下の本を買ってもらうことができて、明日、借りられることになりました。 楽しみです。 圏論入門 Haskellで計算する具体例から 雪田 修一 (著)
470 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 20:26:41.82 ID:zDdu0cA6.net] 雪田著『圏論入門』を借りてきました。 圏論、難しい上につまらないです。
471 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 20:35:32.88 ID:4VK1Z/Kj.net] 何を期待して借りたのやら
472 名前:デフォルトの名無しさん mailto:sage [2020/09/04(金) 21:42:59 ID:W/y0jTmz.net] 圏論はモナドへの近道
473 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 02:01:31.05 ID:hzZ7uEzq.net] >>460 です 自己レスです 色々調べて一応Complex RationalにNumのinstance入れる方法見つけました しかしかなり裏技というか、あまり関心しない方法かもしれません やはり正攻法は>>462 のようにカプセル化する方だと思いますけど、せっかく見つけたのでうpします >>462 と同じく0,3,4i,7/2+7/2iが同一円周上にあるか確認するプログラムです ついでにabsも使えるようにしてあります absがいらないならsqrt=の部分がなくても動作します
474 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 02:03:13.00 ID:hzZ7uEzq.net] import Data.Ratio import Data.Complex instance (Integral a)=> Floating (Ratio a) where sqrt = fromRational.toRational.sqrt .fromRational.toRational instance (Integral a) => RealFloat (Ratio a) where floatDigits = floatDigits.fromRational.toRational decodeFloat = decodeFloat.fromRational.toRational scaleFloat k x = if k > 0 then x*2^k else x/2^(-k)
475 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 02:03:23.39 ID:hzZ7uEzq.net] i = 0:+1%1 onCircle a b c d = id $ (==0) $ imagPart $ ((a-c)/(b-c))/((a-d)/(b-d)) (a,b,c,d)=(0,3,4*i,7/2+7/2*i) main = do print $(1/2+3/4*i)/(5/6+7/8*i) print $ onCircle a b c d print $ ((a-c)/(b-c))/((a-d)/(b-d)) print $ abs $ 2+3*i print $ abs $ 15+8*i ---- 618 % 841 :+ 108 % 841 True 4 % 7 :+ 0 % 1 8118979690322419 % 2251799813685248 :+ 0 % 1 17 % 1 :+ 0 % 1
476 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 13:15:04.05 ID:T3msgi7J.net] 純粋に興味のみからすごいHaskellを読んでいるのですが、みなさんはなぜHaskellを使っているのですか?
477 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 13:35:41.51 ID:EwmIpy36.net] 宣言的に書けた時の気持ち良さがたまらんから
478 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:03:13.58 ID:T3msgi7J.net] >>472 やはり実用よりは趣味ということですね。
479 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 14:05:39.74 ID:14+GNjHV.net] Haskellで書かれた実用的なアプリ無いからな。
480 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 17:37:30.47 ID:acNOQ2m1.net] 『Haskellによる関数プログラミングの思考法』って出たの3年前なのに書籍版はもう絶版なんだな 旧版を元にした『関数プログラミング入門』の方はまだ売ってるけど
481 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 18:22:32.54 ID:r4XBIbpb.net] 3年で消えてもらった方が新しい商品が売れるという実用的思考 永久保存など消費者の趣味だ
482 名前:デフォルトの名無しさん mailto:sage [2020/09/05(土) 18:33:16.32 ID:mscSzbua.net] >>474 pandoc は?
483 名前:デフォルトの名無しさん mailto:sage [2020/09/06(日) 01:05:18.13 ID:lOdtO6cj.net] >>474 Elmコンパイラは? PureScriptコンパイラは? spagoは?
484 名前:デフォルトの名無しさん mailto:sage [2020/09/06(日) 01:51:45.47 ID:Z433FiXx.net] HaskellっていうかParsecが優秀なんだろな
485 名前:デフォルトの名無しさん mailto:sage [2020/09/06(日) 22:23:29.89 ID:YBPAq9+r.net] >>471 パーサーを書く必要があって使い始めた
486 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 11:55:03.70 ID:xmFuETjj.net] 純粋に興味からです
487 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 17:09:40 ID:6+huFxV7.net] >>467 マクレーンの圏論とか読んでも果てしなく遠回りするだけだぞ。
488 名前:デフォルトの名無しさん [2020/09/07(月) 17:57:43 ID:kXMphwO9.net] >>482 ベーシック圏論はどうですか?
489 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 18:10:28 ID:oaoIrH3d.net] haskellのモナド理解するだけなら圏論いらないからね ベーシック圏論は内容を限定して敷居の低い例を使っているので相対的には 読みやすいけど、基礎的な数学の知識がないと例が理解の助けにならないのは同じ
490 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 20:28:07.77 ID:xmFuETjj.net] 関手って圏が持つ「対象と射」同志の関連付けのことだよね? なぜfmap関数を定義すると関手を実装したことになるの?
491 名前:デフォルトの名無しさん mailto:sage [2020/09/07(月) 21:15:30.28 ID:3sLeGs6G.net] fmapという名前が変 関手は射と見なせる
492 名前:デフォルトの名無しさん [2020/09/08(火) 01:49:12.47 ID:L2ZCtfX62] 副業、大手も制度着々…コロナ禍、働き手は空き時間活用 https://www.itmedia.co.jp/business/articles/2009/07/news111.html 富士通「年収3500万円」の衝撃 ソニー、NECも戦々恐々の「グローバル採用競争」 https://www.itmedia.co.jp/business/articles/2008/21/news031.html 東大の起業ラッシュは本物か、大学発ベンチャー数日本一の実力 https://business.nikkei.com/atcl/NBD/19/special/00448/ AI研究の第一人者、東大・松尾研でも起業ラッシュ https://business.nikkei.com/atcl/gen/19/00158/051900002/?i_cid=nbpnb_arc 失敗は認める、多数決はダメ。拡大する「社会起業家集団」の作り方 https://newswitch.jp/p/23033 新卒“即”起業せよ。社会起業家への最短距離に挑む若者たち https://newswitch.jp/p/23020 人々の共感を得られないと潰される時代。 https://news.yahoo.co.jp/articles/37aef71415e8181ce8451e27feb3983bf1f6f9cd ゼロから起業するよりも事業承継(小さな会社の買収)が圧倒的に有利である3つの理由 https://honsuki.jp/pickup/17323.html 「エース人材だって起業OK」、NECは挑戦者が集う場をつくる https://business.nikkei.com/atcl/gen/19/00106/012900003/ NECなど「出向起業」 大企業人材、起業しやすく https://www.nikkei.com/article/DGXMZO61733720Q0A720C2TJ1000/
493 名前:デフォルトの名無しさん [2020/09/08(火) 01:52:19.60 ID:L2ZCtfX62] 70億円調達のネットショップ作成サービスhey、「我の弱い人同士の組織力」武器にEC市場シェア拡大目指す https://www.businessinsider.jp/post-219205 【劇団ノーミーツ1】役者も客も会わないオンライン演劇で7000人動員。制作チームは全員20代、半分は会社員 https://www.businessinsider.jp/post-219184 「ガーナのゴミ」がなぜ1点500万円の作品に変わるのか https://www.businessinsider.jp/post-208314?itm_source=article_link&itm_campaign=/post-219184&itm_content=https://www.businessinsider.jp/post-208314 利用、無料。日本版衛星データプラットフォーム「Tellus」がすごい理由…“宇宙の視点”でビジネスはこう変わる https://www.businessinsider.jp/post-219279 「起業ブーム」が新たなフェーズに 大学発ベンチャーへの想い https://forbesjapan.com/articles/detail/35527 かつて学者がやっていたことを、今は起業家がやっている https://diamond.jp/articles/-/232874 番号やアドレス不要の無料通話アプリRe-mo登場 ドワンゴが配信開始 https://japanese.engadget.com/ios-dwango-re-mo-072853620.html
494 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 09:53:26.80 ID:TuvEFz+K.net] 勝俣「シャー!」
495 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 10:39:29.87 ID:o85d1us6.net] 圏の圏な
496 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 11:37:10.69 ID:sfIbn56V.net] 圏論いらずで、モナド理解するのにどうすりゃいいの?
497 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 12:18:16.37 ID:/Y+BdKRx.net] do記法が使えるようになる モナド=>モナド則を満たす=>do記法はモナド則の別バージョン 結局のところ、モナドはdo記法を作りたかった。よって、先頭の話になる。
498 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 12:43:31.80 ID:/Y+BdKRx.net] ちょっと嘘だな 488は既にあるモナドを使う場合の話で 自分でモナドを作ってみたいのなら モナド則を満たしていることの確認が必要 ってことで、モナド則の勉強も必要 個人的にモナドが一番分かり易かったのは、↓かな サルでもわかるIOモナド@-B hot-heart-cool-mind.seesaa.net/article/393131366.html
499 名前:デフォルトの名無しさん [2020/09/09(水) 12:59:11.96 ID:7PwBIIdR.net] モナドというのが何なのか知らないのですが、モナドが何か分かっていないとモナドは使えないものなんですか?
500 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 13:33:56.84 ID:Ss6OMKhc.net] Haskellで出てくる演算子の読み方一覧ってないですか?
501 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 18:46:46.75 ID:7PwBIIdR.net] >>494 それともHaskellという言語は何でもかんでもある数学的に説明できるように設計されていて気持ちがいいというだけのことでしょうか?
502 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 18:50:44.11 ID:N/YnHGom.net] 低学歴の数学弱いなのに、頑張ってHaskellで開発の会社に潜り込んで仕事してる人も居るから。
503 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 19:41:50.73 ID:YuHH3QPI.net] 高卒のワイでもプロのHaskellerになれるん? その方法教えて欲しいわ。
504 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 19:44:40.13 ID:7PwBIIdR.net] 仕事でHaskellを使っている会社があるのですか? 実用面でのHaskellの利点があるということですか?
505 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 19:58:00.07 ID:7PwBIIdR.net] 「Haskellの美しさを知っている人は、人生に絶望することはない。Haskellで世界を変えたい。」などと表紙に書かれているHaskellの本が ありますが、そんな大げさなものでしょうか? 単なる一プログラミング言語ではないんですか?
506 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 20:15:19.85 ID:+oYkcMI9.net] 型システムが強力ってだけで実用上有利 現実、型がしょぼい言語よりバグ減るし、 型から関数探せるから既存プログラムの再利用性高いし、 ウェイがノリで作る「イケてる」オレオレライブラリなんかにも型の合うある程度まともな設計が求められるし
507 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 20:16:27.76 ID:YuHH3QPI.net] それは持てる者がほざく絵空事やでw
508 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 20:56:40 ID:/Y+BdKRx.net] んじゃ、async/awaitがモナドで実装できるんやでー 詳細はしらんけどw
509 名前:デフォルトの名無しさん mailto:sage [2020/09/09(水) 22:27:03 ID:M9aZojkl.net] IDEは何がおすすめ?
510 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 02:20:35 ID:6Lrmk0HC.net] らっきょ
511 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 08:33:57.45 ID:OHVt/ux7.net] 俺も聞きたいけどVScodeじゃ辛い?
512 名前:デフォルトの名無しさん mailto:sage [2020/09/10(木) 13:10:19.99 ID:he9lsIhb.net] >>500 理解した途端にこんなしょー
513 名前:烽ネいことでドやってたのかと絶望するよ。 [] [ここ壊れてます]
514 名前:デフォルトの名無しさん mailto:sage [2020/09/11(金) 22:58:53.84 ID:dNbZ7rGGn] デキる人ほどフリーランス化する?★働き方改革 https://www.youtube.com/watch?v=ALflcwYOJtQ 年収890万円以下は社会のお荷物★騙される労働者 https://www.youtube.com/watch?v=CAp-ZrJpF54 騙されたくなかったら勉強しろ★他人のルールは損をする https://www.youtube.com/watch?v=s176O6qKuPw 底辺の99%は一生底辺★10年後が見えない同僚たち https://www.youtube.com/watch?v=4Mfiwn2sPD8 稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ? https://www.youtube.com/watch?v=Fi7bILN4wes サラリーマン思考では儲からない理由 https://www.youtube.com/watch?v=iW6oAo0q0ZI で、無職は稼いでるの?★YouTube収益はアホにも分かりやすい https://www.youtube.com/watch?v=md0WPAsfarY
515 名前:デフォルトの名無しさん [2020/09/12(土) 10:38:44.00 ID:A2+hHxph.net] [分数モナド](https://ncatlab.org/nlab/show/Grothendieck+group+of+a+commutative+monoid) 日常生活でも目にする`2 / 3`のような分数表記はモナドになっている。 吸収元の問題があるので、ネタとしては引き算`2 - 3`の方が扱いやすいが、 引き算の場合、`2 - 3 = - 1`のように計算してしまった結果が使われ、 日常生活では生々しいモナド表記はあまり使われない。その点、分数では、 直積からのコンストラクターをもろに使った漢な表現が 日常生活の中で使われている。 分数は、モナドを使うことと、モナドを理解することは別腹という 良い例になっている気がする。分数がモナドになっていることが生きてくるのは、 システムがそれなりに複雑になってからじゃないかと思う。抽象化には コストがかかるので、そのコストに見合った見返りが必要になるが、 システムが簡単だと、抽象化のコストをペイできない。 分数モナドは有名な例なので、何処かのブログで紹介されていると思うが、 見たことがないので、書いてみた。ホームが可換モノイドの圏なので、 オレオレモナドになってしまうが、モナド則の`QuickCheck`はできるので、 圏論の練習になるかもしれない。
516 名前:デフォルトの名無しさん mailto:sage [2020/09/12(土) 20:26:45.44 ID:TbuoUVLB.net] は?何言ってんの
517 名前:デフォルトの名無しさん [2020/09/13(日) 08:12:50.88 ID:Tso/1gLY.net] ひ?何言ってんの
518 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 14:14:05.81 ID:7XfXIlf2.net] >>509 return と >>= は何になるんですか?
519 名前:デフォルトの名無しさん mailto:sage [2020/09/13(日) 15:14:54.14 ID:Gippd8g0.net] しらないけど return x = x / x ぐらいしか定義できなさそう
520 名前:デフォルトの名無しさん [2020/09/13(日) 21:12:53.92 ID:Tso/1gLY.net] ふ?何言ってんの 可換モノイドの圏は集合の圏の [部分圏](https://ncatlab.org/nlab/show/subcategory)だが、 集合の圏ではない。したがって、分数モナドは、 Haskellの`Monad`のインスタンスにならない。 例えば、次のような実装を考えると、 ``` code newtype Bunsu a = Bunsu { runBunsu :: (a, a) } deriving (Show, Functor) instance (Eq a, Semigroup a) => Eq (Bunsu a) where ... instance (Semigroup a) => Semigroup (Bunsu a) where ... instance (Monoid a) => Monoid (Bunsu a) where ... instance (Monoid a) => Group (Bunsu a) where ... bunsu_pure :: (Monoid a) => a -> Bunsu a bunsu_pure = ... ``` 縛り`Monoid a`が邪魔をして、`Bunsu`は`Applicative`のインスタンスに できない。それでも、通常の関数の形でなら`bunsu_pure`と`bunsu_join`は 書けるので、モナド則のチェックはできる。ただし、`Bunsu`は、 可換モノイドの圏でのモナド則は満たすが、集合の圏でのモナド則は満たさない。 質問への直接の答えは避けるが、可換モノイドの圏で考えないと 答えは得られない。
521 名前:デフォルトの名無しさん [2020/09/13(日) 23:57:07.12 ID:Tso/1gLY.net] へ?何言ってんの もしかすると、何言ってんのが前の投稿にかかっちゃったかもしれない。 何も考えずに、何言ってんのおじさんプレイを楽しんでいるだけなので、 気にしないでほしい。 ついでなので。 `return x = x / x`という選択は、集合の圏では、取りうる唯一の選択肢かも しれない。自分も他に思いつかない。しかし、可換モノイドの圏では、 他にも選択肢がある。それも含めて、 [記事](https://ncatlab.org/nlab/show/Grothendieck+group+of+a+commutative+monoid) に全て書いてある。他人事なので断言してしまうが、この記事より詳しい 分数モナドの解説は地球上には存在しない。しかし、悲しいかな、 Haskellの解説記事と同じで、 * わかる人にはわかるが、 * わからん人にはなるほどわからん といういつものパターンになっていると思う。解説案件の宿命かもね。
522 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 02:32:09.85 ID:TxRaIMAU.net] >>=は何ですか?
523 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 02:44:47.64 ID:SnB9iMGf.net] 圏論わからんからなんもわからん
524 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 16:41:03.56 ID:TxRaIMAU.net] Monad という概念が数学の圏論の Monad から来るのはよく解説が見つかるんですが、Applicative (≒Monoidal) については数学からの意味付けが見つかりません コレ数学的にはなんなんですか?
525 名前:デフォルトの名無しさん mailto:sage [2020/09/14(月) 23:29:35.74 ID:XfiH3m4/.net] そのままじゃん アプリカティブファンクター なんだから、そのまま日本語訳でよくね つまり、関手 プログラマーにとって使いやすくしただけ ところで、”Applicative (≒Monoidal)”なのか? こっちの方がい意味不明なんだが モノイドって意味なら、≒モナド の方 モナイド則=モノイド則 モナドの方は、自己関手って条件が付くだけ しらんけど
526 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 00:17:11.21 ID:wUKRYY2O.net] >>519 まだ自分でハッキリ確かめたわけじゃないんですけど Applicative と Monoidal は同型なんだそうです https://qiita.com/Guvalif/items/7f893d9a078e03c9e425 まだこっちはどういう意味で“同型”になるのかわかってませんけど 数学的な意味でのMonadは英語のwikiに詳しく説明が載ってて↓ https://en.m.wikipedia.org/wiki/Monad_(category_theory) このFormal DefinitionがまさにHaskellのモナド則に繋がっていくのは確かめました 問題はApplicativeは圏論のどの概念に該当するのかの説明がサッパリ見つからないんです
527 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 02:19:25.61 ID:PObv6BQ8.net] (a -> b) -> (m a -> m b) m (a -> b) -> (m a -> m b) (a -> m b) -> (m a -> m b) こいつらは中央の->と左右の->を区別してないから数学的な意味が見えない returnとjoinは->が一つしかないから問題ないが
528 名前:デフォルトの名無しさん mailto:sage [2020/09/15(火) 10:15:51.98 ID:TeSbfrM9.net] >>521 そう、Haskellの圏論がらみの話はその“冪対象”(exponential object)が絡むのがややこしい しかしFunctorは当然としてMonadも冪対象を用いないで形式化されてる(というより計算論の世界への応用のずっと以前からある) Applicative(=Monoid?)はどやねんという話なんです 圏論の世界ではなかったものが計算論の世界に導入されてから考え出されたもんなんですかねぇ?
529 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 01:31:29.62 ID:yuR5T5xB.net] strong lax monoical functor
530 名前:デフォルトの名無しさん mailto:sage [2020/09/16(水) 22:12:52.40 ID:CfmtxJKj.net] モノイド圏とかモノイド対象とかあんのだけど、モノイド(モノイダル)関手ってのもあんのね 読む気は無いんだけど、アプリカティブ関手とモノイダルXXが同型ってのは無いと思うが っておもったけど、関手同士なんだから、いくつか条件つければモナドとモノイドみたいな関係もありうるんかな? あとは、カン拡張、随伴、普遍性(極限だっけ?) どれかから相互に変換出来るだっけ?みたいなもん? どちらにしろ、定義の話で面白みは無いとは思うのだが
531 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 10:32:26.07 ID:2a8IoKJu.net] 見つけた https://qiita.com/Guvalif/items/7f893d9a078e03c9e425 このサイトの人がまとめたpdfに書いてある とは言ってもやはりclosed categoryは仮定してる やっぱりapplicativeはmonadと違って“内部ホム”を持たない圏では定義できないんだろな “内部ホム”もつ圏でmonoidal functorに<*>を定義するのはわりと簡単だけど↓ F(X) × F(Y^X) →F(X×Y^X) (coherence) →F(Y) (F(eval)) https://en.m.wikipedia.org/wiki/Monoidal_functor pureが全然できんなぁと思ってたら“strong”という条件からpureが作れるんだな まぁHaskellて圏の話するときはHASKて言えればいいんだからコレでわかったことにしよ
532 名前:デフォルトの名無しさん [2020/09/28(月) 01:41:48.03 ID:0EuZ+v5t.net] [Promise](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise) の小さい例題の[html](https://pastebin.com/yxSRyg2u)をアップした。 async/awaitはPromiseのお助け文法になっているが、それは扱っていない。実行環境は、 [RStudio](https://rstudio.com/products/rstudio/)から [Node.js](https://nodejs.org/ja/)を呼び出している。
533 名前:デフォルトの名無しさん [2020/10/12(月) 16:08:54.17 ID:Wx/lfAmjI] 挑戦する馬鹿として生きるか?批判だけする雑魚として死ぬか? https://www.youtube.com/watch?v=4jlQlo1oC3E 奴隷職に就く★自ら奴隷を選んで不満を言う愚かさ https://www.youtube.com/watch?v=loD5ukKsZOk バカは騙され最低賃金でコキ使われる★物価とか関係なし https://www.youtube.com/watch?v=sQMrMfqdgrQ 勉強しないから奴隷人生★実業と人を残す人生哲学 https://www.youtube.com/watch?v=on2gURXi4Ks 正社員特権が「ブラック社員」を生む★正社員は訴え放題 https://www.youtube.com/watch?v=lSW1vc8-qMg 「で、年収は?」と聞くバカとは合わない社長業 https://www.youtube.com/watch?v=nEELEUhBLDk
534 名前:デフォルトの名無しさん mailto:sage [2020/10/14(水) 04:31:41.26 ID:+VLXbnA3.net] >>20 ワードカウントのロジックが不思議ちゃんだと思ったけどワードと空白の関係が "abc dd "みたいな行儀が良い書式じゃないとだめなんだな " "一文字スペースでワード数が1になってしまうみたいな countFile :: String -> (Int, Int, Int) countFile s = let (cs, ws, ls, _) = foldl' go (0, 0, 0, False) s in (cs, ws, ls) where go :: (Int, Int, Int, Bool) -> Char -> (Int, Int, Int, Bool) go (cs, ws, ls, wasSpace) c = let addLine | c == '\n' = 1 | otherwise = 0 addWord | wasSpace = 0 | isSpace c = 1 | otherwise = 0 in (cs + 1, ws + addWord, ls + addLine, isSpace c)
535 名前:デフォルトの名無しさん [2020/10/31(土) 09:11:59.11 ID:UJYxitvT.net] walk.northcol.org/haskell/adts/ >代数的データ型(algebraic data type)とは,図のように木構造で表現される値からなるデータ型のことです. 必ず木構造に限定されるんだろうか? OOPではオブジェクトグラフがありネットワークになりうるが、 Haskellでは絶対に木と考えて良いの?
536 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 12:29:50.75 ID:cEs7BAmA.net] いいんじゃない? 型の全体は文脈自由文法で規定されるクラスだから木になる希ガス
537 名前:デフォルトの名無しさん [2020/10/31(土) 12:34:33.57 ID:fxcwqRC2.net] この木なんの木きのこる木
538 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 12:37:07.03 ID:CAmth+XY.net] 見たこともない木ですから 独自実装のバグが出るでしょう
539 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 13:17:41.17 ID:cEs7BAmA.net] でもよくよく考えたらHaskellのデータ型って「展開できる表現がひとつもないデータ型」もありうるんだな 無限の木になる data InfiniteSequence = IS {car :: Int, cdr :: InfiniteSequence} arithSeq a d = IS a $ arithSeq (a+d) d term 0 (IS x y) = x term n (IS x y) = term (n-1) y main = print $ term 10 $ arithSeq 5 3 ---- 53
540 名前:デフォルトの名無しさん [2020/10/31(土) 13:26:01.44 ID:UJYxitvT.net] 再帰的なデータ型はグラフにできるのでは?
541 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 13:37:30.03 ID:B0ELcd4k.net] 最終的に暴走しないで展開が停止するものだけをデータ型と呼ぶならそうだけど、iterate (+4) 5 ですら無限の木になってしまう
542 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 21:13:27.13 ID:3k5Im+3l.net] haskellの配列は代数的データ型でばないのか?
543 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 22:07:18.29 ID:XiPKdEPZ.net] foldrなどの引数のことを代数的と言っていたような気がする 引数は(:)と[]でもいいし (+)と0でもいい 引数を渡すと関数 [a] -> b が返ってくるが これは関数というよりOOPの継承関係のような印象
544 名前:デフォルトの名無しさん mailto:sage [2020/10/31(土) 22:34:53.43 ID:B0ELcd4k.net] Haskell のデータ型は再帰を許すからな どうしても「終端記号(大文字から始まるData constructet) を木構造に並べたもの」という説明をしたいなら無限グラフを使わざるをえない
545 名前:デフォルトの名無しさん [2020/11/01(日) 07:14:51.56 ID:fIYIMdhR.net] walk.northcol.org/haskell/lists/#_%E3%83%AA%E3%82%B9%E3%83%88%E3%81%AE%E7%95%B3%E8%BE%BC%E3%81%BF 1)foldr (+) 0 [1, 2, 3] (+)とカッコがつく理由は? 2)map' f = foldr (\x a -> f x : a) [] xは[]の各要素?aは何?
546 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 08:58:44.92 ID:Srz4hpJo.net] 1) walk.northcol.org/haskell/operators/#_%E4%B8%AD%E7%BD%AE%E3%81%A8%E5%89%8D%E7%BD%AE%E3%81%AE%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88 2) このままだと対応する値が存在しないので、少し書き換える map' f xs = foldr (\x a -> f x : a) [] xs xはxsの各要素、aは最後の要素では[]で、 それ以前は後ろの要素に(\x a -> f x : a)を適用した結果
547 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 09:15:58.91 ID:v6ASK7zT.net] >>539 > > 1)foldr (+) 0 [1, 2, 3] > (+)とカッコがつく理由は? + がないと+は中置演算子で (foldr + 0) [1, 2, 3] になる (+)があると普通の関数としてfoldrの因数として解釈される > 2)map' f = foldr (\x a -> f x : a) [] > xは[]の各要素?aは何? []はfoldrの第3因数と同じ型の空集合 a は無名函数(\x a -> f x : a)の第2因数 定義に従ってmap' sin [] [5,6]] はわかりやすく(\x a -> sin x : a)を中置演算子++++で書くと(すなわちx ++++ a = (sin x) : aとすると) map' sin [] [5,6] = 5 ++++ ( 6 ++++ [] ) = 5 ++++ ( (sin 6) : [] ) = 5 ++++ [ (sin 6) ] = [ (sin 5) : [ (sin 6) ] = [ (sin 5) , (sin 6) ] となる
548 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:14:49.54 ID:1eMkmBeN.net] 因数?引数ではなく? Haskell用語なのかな
549 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:21:30.53 ID:Srz4hpJo.net] 1) foldr + 0 [1,2,3] と書いた場合、「+」より関数適用のほうが優先順位が高いので、 foldr + (0 [1,2,3]) と解釈される。 つまり、0という関数を[1,2,3]という引数に適用したものと、foldrを足し算するという意味となる 2) 具体例 map' f [1,2,3] = foldr (\x a -> f x : a) [1,2,3] 3番目の値 (\x a -> f x : a) 3 [] = f 3 : [] = [f 3] 2番目の値 (\x a -> f x : a) 2 [f 3] = f 2 : [f 3] = [f 2, f 3] 1番目の値 (\x a -> f x : a) 1 [f 2, f 3] = f 1 : [f 2, f 3] = [f 1, f 2, f 3]
550 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:25:40.23 ID:Srz4hpJo.net] おっと、具体例の「foldr (\x a -> f x : a) [1,2,3]」は 「foldr (\x a -> f x : a) [] [1,2,3]」の誤り
551 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:36:13.55 ID:B/d//mYI.net] い・・・引数
552 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 10:54:46.55 ID:z/eHKN3/.net] 引数です orz 普段“因数”の方が使う人なのでうっかりしたorz
553 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 11:03:53.67 ID:93fSMn/e.net] こ・・・因数
554 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 11:05:28.12 ID:z/eHKN3/.net] こ?
555 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 11:11:25.51 ID:4+fLUvoM.net] だ…因数
556 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 12:57:34.37 ID:9/8GaKcH.net] ひきすう
557 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 15:22:11.82 ID:N8AW169o.net] 引数を「ひきすう」と読むのは、同音異義語との混同を避けるための慣用読みだと思ってた 化学(ばけがく)、鼻腔(びくう)みたいな
558 名前:デフォルトの名無しさん [2020/11/01(日) 15:24:45.41 ID:BdB3gM+x.net] 返り血
559 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 17:34:03.38 ID:S9fsJ+JS.net] Parameterとargumentsの違いがよくわからない
560 名前:デフォルトの名無しさん mailto:sage [2020/11/01(日) 17:44:50.76 ID:5aO2zs3I.net] https://qiita.com/yuba/items/141bdb2df407ee37417f だってよ