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/
878 名前:デフォルトの名無しさん mailto:sage [2021/07/01(木) 22:45:34.96 ID:FFAeznD4.net] quarifiedも使えるよ お好みで
879 名前:デフォルトの名無しさん mailto:sage [2021/07/02(金) 03:41:23.49 ID:aoQxpJoS.net] >>864 ghciのコマンドライン引数に、使用したいパッケージを指定するものがなかったっけ? baseパッケージ以外はちゃんと引数で明示しないとghci上で使えなかったような気がする。
880 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 00:45:51.28 ID:FlY7oUIG.net] すいません 質問させて下さい Ghc.Types というのを眺めてたんですが 謎の#が入ってるコンストラクターがいっぱい見えます data {-# CTYPE "HsInt" #-} Int = I# Int# data {-# CTYPE "HsDouble" #-} Double = D# Double# newtype IO a = IO (State# RealWorld -> (# State# RealWorld, a #)) などなど なんですかコレ? 一方でたとえばDoubleはReal classに属してるのでsinとかlogとかの処理をどこかでやってると思うのですがどこにも見つけられません もちろんこんなプリミティブな演算はHaskellではなくCとかに丸投げしてるんでしょうけどその手の宣言なりなんなりはないもんなんですか?
881 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 08:27:37.09 ID:9m9xryS6.net] https://wiki.haskell.org/Unboxed_type 記事内リンクも見てね
882 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 09:09:34.41 ID:Qo9dk8cs.net] >>871 なるほど まだよくわかってないですけどunboxed typeというやつなんですね 後半もどなたか分かりませんか? 実は事情で“多倍長の浮動小数点”を自作したいのです そのためにはReal型にしなくてはならずsinとなlogとか結構ある数の関数を実装する必要があります どこかに参考にできるライブラリ転がってませんか? 性能は求めないので多倍長精度の計算ができるReal型を実装してる例が欲しいです
883 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 09:23:00.75 ID:Qo9dk8cs.net] 間違えた Float classがsinとかいっぱいあって難しいです
884 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 09:25:56.65 ID:Qo9dk8cs.net] 違う Floating orz
885 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 12:08:32.98 ID:5i+2sdHC.net] https://github.com/ghc/ghc/blob/master/libraries/base/GHC/Float.hs#L588 ライブラリがありそうな気がするけど、ghcクローンしてやりたいことできるか調べてみたら
886 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 12:28:39.86 ID:5i+2sdHC.net] hackageをfloatで検索した結果。怪しそうなやつ: https://hackage.haskell.org/package/variable-precision https://hackage.haskell.org/package/AERN-Real-Interval
887 名前:デフォルトの名無しさん mailto:sage [2021/07/10(土) 23:01:22.87 ID:zugIw5Ja.net] あざっす ソース読んで研究しまつ
888 名前:デフォルトの名無しさん mailto:sage [2021/07/11(日) 06:49:31.34 .net] リストのシャッフルは、2値ランダムと分割統治法で構成できるという境地に至った
889 名前:デフォルトの名無しさん mailto:sage [2021/07/11(日) 16:41:58.17 ID:KhXXWhgG.net] 余談だけど オードリー・タン氏に性的に食指が動く 男性っているのかな。
890 名前:デフォルトの名無しさん [2021/07/16(金) 17:38:36.16 .net] あののののの! なんで型コンストラクタ名が被ったらいけないんですか! 型が違うならそのコンストラクタ名くらい被ったっていいじゃないですか!
891 名前:デフォルトの名無しさん [2021/07/16(金) 23:35:14.79 .net] Esqueleto では SELECT 〜 FROM ONLY an_table 〜 みたいに ONLY を付けることで継承テーブルを対称から外すように指示することはできないんですか? 生SQLを書くしかありませんか?
892 名前:デフォルトの名無しさん [2021/07/17(土) 15:02:59.17 ID:eTC1af8g.net] >>879 ちょまどは鳳唐好きだって言ってた
893 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 17:39:27.65 ID:44fEdIj7.net] 私は、MBAを取るために、ハワイにある伝統的なビジネススクールに通っていたとき、どこかの大企業で 働く中間管理職が教えるマネジメント「論」や経済「論」を学ぼうとしている自分に気付いた。 ビジネス経験のない先生は、学校制度の外に一度も出たことがない人だ。つまり彼は、5歳で幼稚園に入ってから ずっと学校制度の中にいるにもかかわらず、学生たちに実社会について教えようとしていることだ。 とんだお笑い草だと思った。 講師陣や中間管理職や教師のほとんどは、ゼロからビジネスを立ち上げるのに何が必要なのかについては何も知らなかった。 ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P62〜63 彼らのほとんどは、学校という象牙の塔を出ると、企業社会という象牙の塔に入った。 安定した仕事と給料に依存していた。つまり、素晴らしいビジネス論をもっている人は たくさんいたが、現実の世界でビジネスをゼロから立ち上げ、大きな富を蓄えるのを可能にする、 素晴らしいビジネススキルのある人はほとんどいなかったということだ。 彼らのほとんどは給料なしで生きていけなかった。 ロバートキヨサキ「人助けが好きなあなたに贈る金持ち父さんのビジネススクール」P63
894 名前:デフォルトの名無しさん mailto:sage [2021/07/17(土) 18:54:41.40 ID:lhv7ZvYo.net] 言語設計者に対する悪口はそこまでにしてやれ
895 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 08:48:06.51 ID:p5uFvWrN.net] まあ、生きていけないぞー死ぬぞーってのが机上の空論の中でも最悪の論だよな 実際には死なない人が多い
896 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 22:53:21.56 .net] すいません、僕がスレを軽率に上げてしまったばっかりにワードサラダBOTの餌食なってしまうとは・・・
897 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 09:08:56.51 ID:Niob4uA5.net] 現状これはとりあえず有効にしとけみたいなGHC拡張ってなにがありますか
898 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 10:46:43.62 ID:jaES3hbu.net] >>887 無いです。 必要なときにのみ必要なだけ宣言するといいです。
899 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 04:08:52.62 ID:FlIQ/SVE.net] ttps://cognicull.com/ja Haskellやるのにこの辺は履修済みであることが求められるの? Obj-Cだとほぼなくてもアプリは書けるけども Haskellって数学じゃないのに数学のフリしてるところあるよね 利用者も然りで余計混乱を招いてる気がする
900 名前:デフォルトの名無しさん mailto:sage [2021/07/26(月) 12:01:28.04 ID:nPPC7Onz.net] >>889 うーん、書きたいプログラムの内容によるとしか言えないかな こうしたことがわからないとHaskellのプログラムが書けないということはない そのあたりはObjective-Cと同じ
901 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 03:35:04.64 .net] Data.Arrayって廃止されたの? GHC.Arr を使えってこと?
902 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 05:37:33.58 ID:O4N47kXx.net] >>891 Data.Array は array パッケージにあります。
903 名前:デフォルトの名無しさん mailto:sage [2021/07/27(火) 15:27:28.97 ID:6BJr6nx6.net] >>889 フリじゃなくて実際、他のメジャー言語よりは数学的裏付けがされてると思う 利用者も然りなのはむしろ良い傾向 他言語はhaskell以上に、ウェイがノリで書いたようなゴミライブラリが流行ってたり、侍エンジニアレベルのゴミ文献が蔓延ってたりする阿鼻叫喚状態
904 名前:デフォルトの名無しさん mailto:sage [2021/07/28(水) 02:22:30.38 .net] >>892 詳しい情報サンクス
905 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 13:54:44.53 ID:kX7UidPf.net] >>889 Haskell書いてるときにそういう系統の知識が要求されたことはないなぁ、いくつかの概念の出自が圏論だと聞いたことはあるが
906 名前:デフォルトの名無しさん mailto:sage [2021/07/30(金) 14:32:21.44 ID:yBIo03BR.net] すごいHaskellに素晴らしい数学の解説書ってレビューがついてた時はクスっと来たけど
907 名前:デフォルトの名無しさん mailto:sage [2021/08/02(月) 07:34:32.07 ID:Rllz2LO9.net] 例えばOOPの継承関係を否定する 否定するなら対案を出せと言われる この過程は数学ではないけど結果的には半順序関係とか圏とか出てくる
908 名前:デフォルトの名無しさん [2021/08/16(月) 04:30:28.47 ID:aZY1/RTa.net] 純粋関数型でキャッシュは実装可能? 例えばOOPでは計算に時間がかかる値はキャッシュしておいて次の読み取りで キャッシュから返すという事ができる。 このキャッシュの管理をOOPらしいカプセル化によってまともに実装できる
909 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 18:24:35.56 ID:O8pAbV/G.net] >>898 可能です。 memoization をキーワードに調べてみてください。
910 名前:デフォルトの名無しさん mailto:sage [2021/08/18(水) 20:19:16.73 ID:MamsdVYI.net] >>66 オブジェクト指向プログラミングにおける Smalltalk 的な位置づけに来るんじゃないかな。 ガッチガチだから強制的に「その概念」に染まれる。
911 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 00:24:27.59 ID:anV9aH6F.net] 低級言語でインタプリタを作れそうなシェルスクリプト的な位置づけだよ 単一の高級言語を強制されない
912 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 16:00:36.29 ID:IKqVi/r3.net] 関数型言語ってリストとかツリーみたいな再帰的なデータ構造扱うのは得意だけど 有向・無向グラフ(のアルゴリズム)扱うの難しくない?
913 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 18:40:13.11 ID:JntO5v5E.net] >>902 難しいと感じるかどうかは本人の気持ちなので何とも言えません。 ただ、haskellでのグラフ理論の扱いに関しては、 カジュアルな解説もフォーマルな論文もたくさんあります。 ライブラリもあります。 扱ったことはないけど、何となくイメージだけで 難しそうだ、 haskellの苦手分野だと思っているのであれば、 自分に読めそうな記事にいくつかトライしてみてはどうでしょうか。
914 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 21:01:34.14 ID:anV9aH6F.net] >>902 Erlangのようなメッセージ送信を考えればわかるが メモリを共有していない相手にも送れるデータ構造が得意 メッセージとして文字列ばかり使ってるとカプセル化も型情報も無駄になる だから文字列に似ているが異なるデータ構造が役に立つ
915 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 21:36:21.14 ID:NimliznV.net] Applicativeの(*>)演算って何の意味があるの? 第一引数はどうせ捨てられるんでしょ。
916 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 23:09:37.51 ID:SkXNk2uR.net] 確かに左辺 :: f aで言うところのa型の値は捨てるが Maybeとか[]みたいな直和型でどの値コンストラクタを使って構築されたかの情報は影響するよ
917 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 21:35:42.38 ID:Wv9PZvrP.net] >>906 それは第1引数をパターンマッチすることで、たとえ第2引数が同じ値でも、 (*>)の計算結果を変えられることに意味があるってこと? Sum型やProduct型もApplicativeのインスタンスになってるけど、 これらだと(*>)には意味がない? (当然(<*>)など他の演算には意味があると思うけど)
918 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:58:50.16 ID:WIQMD65A.net] >>905 Parsecで左辺の句がいらないときに使う
919 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 17:56:43.60 .net] ぼくようメモ: OpenSUSE でPostgreSQLを使用した開発をしていてstack buildで postgresql-libpq パッケージを途中にビルドする際 pg_config が無いと言われコケることがある 背景: OpenSUSE は postgres-devel から pg_config を削除した。我々は libpq.pc を代わりに使うべきである。 ソース: https://redmine.lighttpd.net/issues/2965 解決法: stack build --flag postgresql-libpq:use-pkg-config としてビルドする
920 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 22:14:55.40 .net] そうか!Trueskill のHaskell実装がなくて論文読んで自分で実装する力がなくても Haskellから実行時にbash 呼び出してPython3 のTrueskillライブラリに標準入力でPythonコードを流し込んで 演算結果を文字列で貰ってきて、それをParserCombinatorで作った字句解析器で読み取ってHaskellのデータに戻せばいいじゃん あたいったら天才ね!
921 名前:デフォルトの名無しさん mailto:sage [2021/09/09(木) 09:49:18.76 ID:rktYy8hS.net] s/天才/脳筋/
922 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 01:55:27.29 ID:bkZL74IR.net] 関数定義の左辺の部分的で、関数名と仮引数名の後の | と = の間の部分って何て名称だっけ? f x y | x < y = ... これの x < y の部分。 あるいは関数定義をこう書く方法の呼び方とか。 この文法や制限などをネットで調べたいんだけど、 名称が思い出せず検索に難儀してる。 できれば英語でお願い。
923 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 03:22:07.48 ID:bkZL74IR.net] >>912 すまん、思い出した、guard だ。
924 名前:デフォルトの名無しさん mailto:sage [2021/09/10(金) 22:23:35.11 ID:kwXNo1Gk.net] >>911 g を忘れてね?
925 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 10:43:55.15 ID:02VLVXq+.net] パターンの質問です Rational型の数が平方数であるかどうか判定するプログラムで isSquare r = r >= 0 && r == ( sqrtR r )^2 sqrtI = truncate . sqrt . fromInteger sqrtR r = let ( a, b ) = ( numerator r, denominator r ) in ( sqrtI a ) % ( sqrtI b ) というのを書きました もちろんこれはうまくいきます しかし numerator, denominator をいちいち取り出すのが鬱陶しいので sqrtR ( a :% b ) = ( sqrtI a ) % ( sqrtI b ) ------- @ と書きたかったのですがうまくいきません
926 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 10:44:01.62 ID:02VLVXq+.net] ネットで調べると {-# LANGUAGE PatternSynonyms, ViewPatterns #-} numDenum :: Integral a => Ratio a -> (a,a) numDenum x = ( numerator x, denominator x ) pattern ( :% ) :: Integral a => a -> a -> Ratio a pattern a :% b <- ( numDenum -> ( a,b ) ) where a :% b = a % b というおまじないがstack exchangeで見つかってコレつけるとうまく行きました うまくいったんですがサッパリわかりません コレ何者ですか? そもそも@はなんでうまく動かないんですか?
927 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 11:58:51.92 ID:Sp73Mnte.net] 計算結果をパターンマッチさせようとして失敗してるのでは 値を値コンストラクタにばらしてその値コンストラクタに応じて処理を変えるのがパターンマッチ (マッチさせる対象がList aなら、:なのか[]なのかに応じて「先頭:後ろ」か空リストかが束縛される) で、計算結果をマッチさせたいならビューってのを定義してあげないといけませんよって話のような
928 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 18:38:05.18 ID:02VLVXq+.net] >>917 レスありがとうございます 原因わかりました ご指摘の通り「計算結果にはパターンマッチさせられない、パターンマッチに入っていい関数はコンストラクタのみ」なのでRatio a型のコンストラクタである( :% )を使ってたのでそこは問題ないと思ってたんですが肝腎要の( :% )が定義されてるGHC.Realをimportしてませんでした Data.Ratioをimportしたら自動的に(:%)も使えるもんだと思い込んでいました Pattern synonymsについては https://qiita.com/as_capabl/items/d2eb781478e26411a44c でちょっと理解できました、が、そもそも使わなくても良くなりました ご協力感謝です
929 名前:デフォルトの名無しさん mailto:sage [2021/09/22(水) 20:18:48.06 ID:02VLVXq+.net] 備忘録がてら調べてわかった事書いておきます Pattern Synonyms は今回のようにライブラリの提供者が型のコンストラクタを提供してない、しかしパターンマッチは使いたいとかの場合に使える拡張のようです {-# LANGUAGE PatternSynonyms, ViewPatterns #-} を使うと pattern ( マッチさせたい表現) <- ( その型から取り出したい値を取り出す関数) -> ( 取り出した値にマッチさせるパターン) ) ( where さらにコンストラクタシノニムとしても使いたい場合の逆変換関数 ) の形で使うようです 例えばInt型でxが偶数であった場合にdiv x 2をパターンマッチで拾うために pattern TwiceOf x <- ( ( \t -> ( div t 2 , even t ) ) -> ( x, True ) ) のように定義しておいて main = do case 2 of { DoubleOf x -> print x; _ -> print "odd" } case 3 of { DoubleOf x -> print x; _ -> print "odd" } のように利用できるようです TwiceOf はあくまでパターンマッチの表現のみで使える“仮の”コンストラクタですがpattern文にwhere句を pattern DoubleOf x <- ( ( \t -> ( div t 2 , even t ) ) -> ( x, True ) ) where TwiceOf x = 2*x のように追加するとあたかもInt型の新しいコンストラクタが追加されたように振る舞い“DoubleOf 2”
930 名前:のような表現が許されるようになるようです 今回の場合はどうすべきか悩みどころです ライブラリの開発者が低レベルの(:%)を公開しない理由もわかるので無理クリ(:%)を使うのもどうなんつて気もするし、かと言ってまだHaskellの標準として認められてない、GHCでしか使えない拡張使うのもどうなんという気もするし [] [ここ壊れてます]
931 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 10:16:50.52 ID:F+2SAjcM.net] >>919 > かと言ってまだHaskellの標準として認められてない、GHCでしか使えない拡張使うのもどうなんという気もするし まさかGHCの言語拡張はすべて使わないつもりですか? せっかくの表現力が著しく落ちますよ。 今あるいは将来 GHC 以外のツールでコンパイルする計画があるのなら仕方ありませんが、 そうでなければ言語拡張の使用を躊躇する理由が見あたりません。 私なら、 ・プログラムが意図した動きをし、 ・かつソースコードが読みやすくなる なら言語拡張を積極的に利用します。 意図通り動くけど可読性が落ちるなら、そこで初めて迷いますね。
932 名前:デフォルトの名無しさん mailto:sage [2021/09/23(木) 20:01:57.83 ID:0hgEU0Ok.net] >>920 まぁそうですね 完全日曜プログラマーなので気分良く書けばいいか
933 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 07:18:33.81 ID:m/60KM4j.net] Stack Overflow に面白い質問が投稿されていた。 要約すると return 1 getLine という式の型は Num t => t で、その値は 1 らしいんだが何で? というもの。 質問者は勘違いして、何で return と getLine が互いに打ち消し合うのかと訊いていたが。 https://stackoverflow.com/questions/69325169/haskell-a-return-before-is-cancelled-out-by-a-monad-after-how なかなか興味深い。 考えてみると haskell の理解がいっそう深まる。
934 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 19:38:43.50 .net] 最近並列処理を齧り始めました ランダム値の生成にmwc-random パッケージの System.Random.MWC.createSystemRandom で生成した GenIO を、全体を通して利用する環境として Reader モナドに入れて使いまわしていたとします ここにSTM で並列処理機能を新規に追加する場合、forkIO したスレッド内で一々そのスレッド専用に GenIO を生成し直すべきでしょうか? というのは、それをしないと 各スレッドで共通の GenIO がコピーされ使用される場合、各スレッドで同じ値が生成されていってしまいランダムの意味をなさないのではないかと思うからです ではこの疑似ランダム生成器を TVar に入れるかとなると、資源の取り合いになって、1スレッド時よりパフォーマンスが低下して元も子もないではないかという懸念があります ここまで思考実験すると、やはり forkIO したスレッド毎に一々、その中で専用の疑似ランダム生成器を新調する必要があるという考えに至りました スレッド数が多くなると疑似ランダム生成器を作るコストがバカにならなくなっていくでしょうが、その辺は頑張るしかないよということで、ぼくの考えは合っていますか?
935 名前:デフォルトの名無しさん mailto:sage [2021/09/26(日) 21:46:38.01 ID:m/60KM4j.net] >>923 そこまでしっかり考察したのなら、質問する前にまず実験してみようよ。
936 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 16:47:57.85 .net] >>924 実験してみたら、各スレッドで別の値が生成されていました しかしドキュメント見ると It uses mutable state so same generator shouldn't be used from the different threads simultaneously.と書いてあるんですが これはどう受け取ったらいいんですかね 各スレッドで別の値が生成されているなら用を為してる(ように思える)からいいじゃないかとも思うのですが 何か別の理由があって、そう思えてもやはり使うなという事なんでしょうか?
937 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 18:11:25.46 ID:XYchXu+H.net] >>925 mutable stateの排他制御をしてないから複数のスレッドで実行するとまずいことが起こるかもしれない、ってことじゃないの? 排他制御 https://ja.wikipedia.org/wiki/%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1
938 名前:デフォルトの名無しさん mailto:sage [2021/09/27(月) 20:38:39.08 ID:MDVYajz0.net] >>925 パフォーマンスの実験もね。 理論上パフォーマンスが落ちると分かっていても、実用上は問題ない場合も多い。
939 名前:デフォルトの名無しさん mailto:sage [2021/09/29(水) 15:57:53.68 ID:lU7q1h04.net] >>922 そこで関数モナドが出てくるのは知らないと思い至らないなあ 勉強になった
940 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 07:09:39.49 ID:N1l0weLI.net] >>922 セミコロンを書かない言語ではすべからく改行直後に (getLine)と書くとどうなるか問題が出てくる
941 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 09:21:54.92 ID:LH+TfD4u.net] すべからく警察だ!
942 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 09:22:48.41 .net] >>926 具体的にどういうケースでどういう問題が起こるか解らないので、取り敢えずドキュメントにスレッド間で共有はやめろとある以上、大人しく従うことにします >>927 STM版が、3950Xエコモードシングル500分の処理が30スレッド割り当てで220分くらいになりましたが CPU使用率も75%前後で残念でした 競合するリソースが多過ぎたからではと思い、競合を避ける事を考えていると そもそもSTMを使わず、スレッド毎にローカルにデータを貯めて処理して最後に各スレッドで部分的に仕上げたデータをChanで流して 、受信した側でデータを総括する、初歩的な方式を思いついたので書き換えました getChanContentsを使いましたが、EOFみたいな最後の通知方法が判らずに、全スレッドの処理が終わりもう誰もデータを流すことのないチャネルから性懲りもなく読みだそうとしてしまい 例外が発生して困っていました 幸いスレッドの数は判っているのでチャネルからtakeする数をスレッド数ちょっきりとして切り上げた所、遅延評価が幸いしてその先を読もうとしなくなり例外は発生しなくなりました(本質的解決かは判りません) これにより処理が18分で終わりました スレッド毎にcreateSystemRandomするように書き換えると21分かかるようになりました オーバヘッド込みでも500分かかっていた時代から驚異的な進化を遂げました 憧れだった Software Transactional Memory は期待程速くなくがっかりしました STMは最初に検討するべきではなく、巧く競合が発生しないように書けないときの最後の手段なのかなと思いました
943 名前:デフォルトの名無しさん mailto:sage [2021/09/30(木) 16:59:33.11 ID:Ai6xyiAS.net] 物理cpuが四つとかの擬似マルチスレッドではそんなに早くならないと思ってたけど、ものによってはそんなにも早くなるもんなんだな
944 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 21:32:31.29 ID:zxVeK0W2.net] と思ったら3950x gpuでほんとに物理スレッドがたくさんある場合の話か
945 名前:デフォルトの名無しさん mailto:sage [2021/10/05(火) 23:20:55.55 ID:75xrYyRf.net] >>922 型注釈してないのに、インスタンスとして関数モナドが選択されるのはどうしてですか? getLineが影響していますか?
946 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 01:58:31.84 ID:3ymQugFf.net] >>934 return 1 getLine は (return 1) getLine だから、 (return 1) が関数(a->b) じゃないと型が合わないんじゃないかな?
947 名前:デフォルトの名無しさん mailto:sage [2021/10/06(水) 22:57:04.48 ID:MRfRTuXd.net] 関数モナドと同じように、引数一つ取るモナド作ったらambiguousって怒られるかなと思ったんだけど、コンストラクタ書かないとならないからうまくいかない。 この値は関数モナドにしか解決されないのかな
948 名前:デフォルトの名無しさん mailto:sage [2021/10/07(木) 09:52:08.72 ID:AVdaEi5L.net] C++のoperator()()に相当する演算を多重定義できないので曖昧ではない
949 名前:デフォルトの名無しさん [2021/10/17(日) 18:41:32.26 ID:DQz0YbVB.net] なんjでめんだこって言う女装子がhaskell勉強していてdao of functional programmingっていう海外の人が書いた文献がわかりやすいってことでそれ読んでいるらしいが ここの人にもそれ読んでいる人いる?
950 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 20:11:52.85 ID:LTEsEtXo.net] これか The Dao of Functional Programming https://github.com/BartoszMilewski/Publications/blob/master/TheDaoOfFP/DaoFP.pdf 圏論関係の内容だな
951 名前:デフォルトの名無しさん [2021/10/17(日) 20:37:14.39 ID:DQz0YbVB.net] >>939 すまんリンク探させてしまってすまない ワイが貼るべきやった ワイは圏論わからないから読まずじまいだったわ いつか圏論習得できたらその際に読もうかなって思ってる
952 名前:デフォルトの名無しさん mailto:sage [2021/10/17(日) 21:08:39.75 ID:LTEsEtXo.net] プログラミングの本質を学ぶには圏論について学ぶ必要があるということらしい 学んですぐ役立つというものではないようで、すぐ役立つ知識がお望みなら他をあたってくれ、とか
953 名前:デフォルトの名無しさん [2021/10/17(日) 23:35:51.47 ID:QqhGhKAl.net] 見せてもらおうか、圏論とやらを。
954 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 00:33:18.04 ID:BIt/UTxD.net] >>939 同じ著者の Category Theory for Programmers https://github.com/hmemcpy/milewski-ctfp-pdf/releases
955 名前:デフォルトの名無しさん [2021/10/18(月) 02:49:04.06 ID:mrfOLNSK.net] また圏論か もういいよ
956 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 12:08:52.29 ID:7GcdH/zA.net] さあ ねがいを いえ
957 名前:デフォルトの名無しさん mailto:sage [2021/10/18(月) 15:15:47.20 ID:r9t2S6+p.net] https://www.youtube.com/watch?v=E-48ent631o https://bangumi.ouj.ac.jp/v4/bslife/detail/156936813.html
958 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 12:14:30.91 ID:9P3eVRHd.net] Free monad とは何か? の、シンプルかつ的を射た説明がsrackoverflowにあった。 (John Wiegley の回答) https://stackoverflow.com/questions/13352205/what-are-free-monads これを読んでから他の色んなFree monadの記事を読むと、すんなり理解できる。 これ、本質がよく解っている人の回答だよね。 こんな格好良く回答ができるよう精進したい。
959 名前:デフォルトの名無しさん mailto:sage [2021/10/22(金) 21:20:57.92 .net] UTF-8 のHaskell ソースコードに書き込んだ日本語文字列を通信先に渡す為に Shift_JIS の String にしたいのですが module Main where import Data.Text.ICU.Convert as ICU import Data.Text as T import Data.ByteString.Char8 as BS main :: IO () main = do conv <- open "Shift_JIS" Nothing let utf8txt = T.pack "皆は、赤ちゃんしゅきぃ?" sjis_bs = fromUnicode conv utf8txt この sjis_bs をどうしたら Shift_JIS の String になるんですか? BS.unpack だと ツ皆ツづ債、ツ静板つソツづ。ツづアツつオツづ」ツつォツつ。ツ? になってしまいます
960 名前:デフォルトの名無しさん [2021/10/22(金) 23:18:21.74 ID:5ielnrPe.net] haskellってpythonに影響与えてるんやな どおりで雰囲気似てる感じするんか
961 名前:デフォルトの名無しさん [2021/10/23(土) 01:09:52.51 ID:o3xA5lbA.net] レイアウトと呼ばれるインデントスタイルは、Pythonが1991年に最初にリリースであり、85年以前にあった Mirandaを参考に1990年にHaskellは登場したはず。
962 名前:デフォルトの名無しさん [2021/10/29(金) 12:55:32.45 ID:SqmTIce6.net] 不動点演算子がわからなくて泣ける 再帰呼び出しになってないのに再帰になってるのはわかるんだけど
963 名前:デフォルトの名無しさん mailto:sage [2021/10/29(金) 18:35:44.90 ID:ZN5Hp6rJ.net] >>951 何が分からないのか分からない
964 名前:デフォルトの名無しさん [2021/10/29(金) 18:40:46.51 ID:uCUCIWXe.net] >>952 なんでわかるんや? 才能か? 後不動点定理がわからん 勉強しろって言われてるけど
965 名前:デフォルトの名無しさん mailto:sage [2021/10/29(金) 20:05:05.45 ID:1mMf/Evz.net] 遅延評価の才能がないと x = f x を思いつかないんだよな y f = f (y f) しか分からない
966 名前:デフォルトの名無しさん mailto:sage [2021/10/29(金) 21:04:54.17 ID:ZN5Hp6rJ.net] >>951 の何もかもが、こちらには分からない。 愚痴を言いたいだけなのか、それとも何か質問をしたいのか。 後者なら、質問内容は何か。 >>953 > 後不動点定理がわからん それだけなら、勉強してくださいとしか言いようがない。 勉強しろと言われているのなら、何か資料が配られたり、 参考文献が挙げられたりしていないのか? そういうのが既にあるのなら、取りあえず全てに当たって、 今分かる部分と分からない部分を徹底的に細かく仕訳してみればいいのでは?
967 名前:デフォルトの名無しさん mailto:sage [2021/11/05(金) 06:38:08.04 ID:UB8UVAT8.net] >>951 分からないのは何故再帰処理してるのかじゃなくて(そこは定義的に明らかだし)、 どうして無限ループせずに終了するのかでいいのかな
968 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 05:07:45.42 ID:HK5ctRa0.net] やっと Monad クラスから return が消えるよ まだ計画段階たけど https://github.com/fumieval/Haskell-breaking-changes
969 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 21:26:09.61 ID:bsdXePE0.net] なんで消すの?
970 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 02:14:35.96 ID:jBQU3T8q.net] >>958 Applicativeクラスにpure関数があるから。 Monad則やApplicative則を満たしてるなら、 まず間違いなく pure = return だから片方で充分。 それにreturnって名前があまりに実態とかけ離れてるしね。
971 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 12:46:13.83 ID:KyLp+2Ep.net] 初歩的な質問ですが、複数の設定ファイル読み込みするのに readFile で全体取得してから処理するのと withFile で hGetLine しながら処理するのではどちらがいいとかありますか? 主に処理速度の点について聞きたいです。
972 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 18:22:40.27 ID:W9vQbDtp.net] >>960 そういうのは、自分で実験すればすぐに確かめられるのでは?
973 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 21:51:56.85 ID:NLyY6NK4.net] >>959 Applicativeにpureがあるのはなんで? Monadのreturnだけにするのは変ですか? 零元がApplicativeの責務なのがピンときてないんです。Monadだと何と合わないんでしょう
974 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 02:22:00.49 ID:EE8p/B0u.net] >>962 できるだけ一次情報に当たりましょう。 >>957 のリンク先の Planned: remove return from Monad の項目の Proposal のリンク先を読んで下さい。 (更にその先の dudcusdion なども) それが最も正確で、かつ、分かりやすいです。
975 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 21:38:06.78 ID:au51kzu/.net] 正確に綴ってくれ
976 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 22:40:31.75 ID:t6DDIn3B.net] 読んでみたけどよくわかんないなあ。AMPを満たすためにApplicative m => Monad mが必要ってことは書いてあるようだけど Monadからreturnを削除して、pureに統一する理由って書いてあるかな? 読み飛ばしたかもしれんけど。 return = pureだから、統一しても同じっていうのは分かるんだけど、Applicativeにpureが必要な理由がわからない。 Applicativeの4つのルールを満たすためにpureが必要なことは、Applicativeの定義に書いてあるけど、圏論わかんないから、このルールが何で必要なのか分からん。 Monoidal Functor?とかいうやつの表現のために単位元(零元じゃなかったね)が必要なんだろうけど、圏論わからんないから分からん。 Monoidと関係あるんだろうか。それなら加法のために単位元が必要なのはわかるんだけど。
977 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 22:42:08.60 ID:t6DDIn3B.net] 誰か噛み砕いて教えて下さい
978 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 06:46:33.09 ID:4zMdVbrs.net] より抽象度の高い方であるApplicativeのpureを生かすのは 私はごく自然に感じるけど mappendと<>も機能的にダブってるから 将来Monoidからmappendが消えるよって Monoidのドキュメントに書いてあるけど もしかしてそれも疑問だったりする? Semigroupの方から<>を消して、 Monoidのmappendを残すんじゃダメなの? って