[過去ログ]
関数型プログラミング言語Haskell Part33 (1002レス)
関数型プログラミング言語Haskell Part33 http://mevius.5ch.net/test/read.cgi/tech/1581326256/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
906: デフォルトの名無しさん [sage] 2021/09/23(木) 20:01:57.83 ID:0hgEU0Ok >>905 まぁそうですね 完全日曜プログラマーなので気分良く書けばいいか http://mevius.5ch.net/test/read.cgi/tech/1581326256/906
907: デフォルトの名無しさん [sage] 2021/09/26(日) 07:18:33.81 ID:m/60KM4j 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 の理解がいっそう深まる。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/907
908: デフォルトの名無しさん [sage] 2021/09/26(日) 19:38:43.50 最近並列処理を齧り始めました ランダム値の生成にmwc-random パッケージの System.Random.MWC.createSystemRandom で生成した GenIO を、全体を通して利用する環境として Reader モナドに入れて使いまわしていたとします ここにSTM で並列処理機能を新規に追加する場合、forkIO したスレッド内で一々そのスレッド専用に GenIO を生成し直すべきでしょうか? というのは、それをしないと 各スレッドで共通の GenIO がコピーされ使用される場合、各スレッドで同じ値が生成されていってしまいランダムの意味をなさないのではないかと思うからです ではこの疑似ランダム生成器を TVar に入れるかとなると、資源の取り合いになって、1スレッド時よりパフォーマンスが低下して元も子もないではないかという懸念があります ここまで思考実験すると、やはり forkIO したスレッド毎に一々、その中で専用の疑似ランダム生成器を新調する必要があるという考えに至りました スレッド数が多くなると疑似ランダム生成器を作るコストがバカにならなくなっていくでしょうが、その辺は頑張るしかないよということで、ぼくの考えは合っていますか? http://mevius.5ch.net/test/read.cgi/tech/1581326256/908
909: デフォルトの名無しさん [sage] 2021/09/26(日) 21:46:38.01 ID:m/60KM4j >>908 そこまでしっかり考察したのなら、質問する前にまず実験してみようよ。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/909
910: デフォルトの名無しさん [sage] 2021/09/27(月) 16:47:57.85 >>909 実験してみたら、各スレッドで別の値が生成されていました しかしドキュメント見ると It uses mutable state so same generator shouldn't be used from the different threads simultaneously.と書いてあるんですが これはどう受け取ったらいいんですかね 各スレッドで別の値が生成されているなら用を為してる(ように思える)からいいじゃないかとも思うのですが 何か別の理由があって、そう思えてもやはり使うなという事なんでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1581326256/910
911: デフォルトの名無しさん [sage] 2021/09/27(月) 18:11:25.46 ID:XYchXu+H >>910 mutable stateの排他制御をしてないから複数のスレッドで実行するとまずいことが起こるかもしれない、ってことじゃないの? 排他制御 https://ja.wikipedia.org/wiki/%E6%8E%92%E4%BB%96%E5%88%B6%E5%BE%A1 http://mevius.5ch.net/test/read.cgi/tech/1581326256/911
912: デフォルトの名無しさん [sage] 2021/09/27(月) 20:38:39.08 ID:MDVYajz0 >>910 パフォーマンスの実験もね。 理論上パフォーマンスが落ちると分かっていても、実用上は問題ない場合も多い。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/912
913: デフォルトの名無しさん [sage] 2021/09/29(水) 15:57:53.68 ID:lU7q1h04 >>907 そこで関数モナドが出てくるのは知らないと思い至らないなあ 勉強になった http://mevius.5ch.net/test/read.cgi/tech/1581326256/913
914: デフォルトの名無しさん [sage] 2021/09/30(木) 07:09:39.49 ID:N1l0weLI >>907 セミコロンを書かない言語ではすべからく改行直後に (getLine)と書くとどうなるか問題が出てくる http://mevius.5ch.net/test/read.cgi/tech/1581326256/914
915: デフォルトの名無しさん [sage] 2021/09/30(木) 09:21:54.92 ID:LH+TfD4u すべからく警察だ! http://mevius.5ch.net/test/read.cgi/tech/1581326256/915
916: デフォルトの名無しさん [sage] 2021/09/30(木) 09:22:48.41 >>911 具体的にどういうケースでどういう問題が起こるか解らないので、取り敢えずドキュメントにスレッド間で共有はやめろとある以上、大人しく従うことにします >>912 STM版が、3950Xエコモードシングル500分の処理が30スレッド割り当てで220分くらいになりましたが CPU使用率も75%前後で残念でした 競合するリソースが多過ぎたからではと思い、競合を避ける事を考えていると そもそもSTMを使わず、スレッド毎にローカルにデータを貯めて処理して最後に各スレッドで部分的に仕上げたデータをChanで流して 、受信した側でデータを総括する、初歩的な方式を思いついたので書き換えました getChanContentsを使いましたが、EOFみたいな最後の通知方法が判らずに、全スレッドの処理が終わりもう誰もデータを流すことのないチャネルから性懲りもなく読みだそうとしてしまい 例外が発生して困っていました 幸いスレッドの数は判っているのでチャネルからtakeする数をスレッド数ちょっきりとして切り上げた所、遅延評価が幸いしてその先を読もうとしなくなり例外は発生しなくなりました(本質的解決かは判りません) これにより処理が18分で終わりました スレッド毎にcreateSystemRandomするように書き換えると21分かかるようになりました オーバヘッド込みでも500分かかっていた時代から驚異的な進化を遂げました 憧れだった Software Transactional Memory は期待程速くなくがっかりしました STMは最初に検討するべきではなく、巧く競合が発生しないように書けないときの最後の手段なのかなと思いました http://mevius.5ch.net/test/read.cgi/tech/1581326256/916
917: デフォルトの名無しさん [sage] 2021/09/30(木) 16:59:33.11 ID:Ai6xyiAS 物理cpuが四つとかの擬似マルチスレッドではそんなに早くならないと思ってたけど、ものによってはそんなにも早くなるもんなんだな http://mevius.5ch.net/test/read.cgi/tech/1581326256/917
918: デフォルトの名無しさん [sage] 2021/10/04(月) 21:32:31.29 ID:zxVeK0W2 と思ったら3950x gpuでほんとに物理スレッドがたくさんある場合の話か http://mevius.5ch.net/test/read.cgi/tech/1581326256/918
919: デフォルトの名無しさん [sage] 2021/10/05(火) 23:20:55.55 ID:75xrYyRf >>907 型注釈してないのに、インスタンスとして関数モナドが選択されるのはどうしてですか? getLineが影響していますか? http://mevius.5ch.net/test/read.cgi/tech/1581326256/919
920: デフォルトの名無しさん [sage] 2021/10/06(水) 01:58:31.84 ID:3ymQugFf >>919 return 1 getLine は (return 1) getLine だから、 (return 1) が関数(a->b) じゃないと型が合わないんじゃないかな? http://mevius.5ch.net/test/read.cgi/tech/1581326256/920
921: デフォルトの名無しさん [sage] 2021/10/06(水) 22:57:04.48 ID:MRfRTuXd 関数モナドと同じように、引数一つ取るモナド作ったらambiguousって怒られるかなと思ったんだけど、コンストラクタ書かないとならないからうまくいかない。 この値は関数モナドにしか解決されないのかな http://mevius.5ch.net/test/read.cgi/tech/1581326256/921
922: デフォルトの名無しさん [sage] 2021/10/07(木) 09:52:08.72 ID:AVdaEi5L C++のoperator()()に相当する演算を多重定義できないので曖昧ではない http://mevius.5ch.net/test/read.cgi/tech/1581326256/922
923: デフォルトの名無しさん [] 2021/10/17(日) 18:41:32.26 ID:DQz0YbVB なんjでめんだこって言う女装子がhaskell勉強していてdao of functional programmingっていう海外の人が書いた文献がわかりやすいってことでそれ読んでいるらしいが ここの人にもそれ読んでいる人いる? http://mevius.5ch.net/test/read.cgi/tech/1581326256/923
924: デフォルトの名無しさん [sage] 2021/10/17(日) 20:11:52.85 ID:LTEsEtXo これか The Dao of Functional Programming https://github.com/BartoszMilewski/Publications/blob/master/TheDaoOfFP/DaoFP.pdf 圏論関係の内容だな http://mevius.5ch.net/test/read.cgi/tech/1581326256/924
925: デフォルトの名無しさん [] 2021/10/17(日) 20:37:14.39 ID:DQz0YbVB >>924 すまんリンク探させてしまってすまない ワイが貼るべきやった ワイは圏論わからないから読まずじまいだったわ いつか圏論習得できたらその際に読もうかなって思ってる http://mevius.5ch.net/test/read.cgi/tech/1581326256/925
926: デフォルトの名無しさん [sage] 2021/10/17(日) 21:08:39.75 ID:LTEsEtXo プログラミングの本質を学ぶには圏論について学ぶ必要があるということらしい 学んですぐ役立つというものではないようで、すぐ役立つ知識がお望みなら他をあたってくれ、とか http://mevius.5ch.net/test/read.cgi/tech/1581326256/926
927: デフォルトの名無しさん [] 2021/10/17(日) 23:35:51.47 ID:QqhGhKAl 見せてもらおうか、圏論とやらを。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/927
928: デフォルトの名無しさん [sage] 2021/10/18(月) 00:33:18.04 ID:BIt/UTxD >>924 同じ著者の Category Theory for Programmers https://github.com/hmemcpy/milewski-ctfp-pdf/releases http://mevius.5ch.net/test/read.cgi/tech/1581326256/928
929: デフォルトの名無しさん [] 2021/10/18(月) 02:49:04.06 ID:mrfOLNSK また圏論か もういいよ http://mevius.5ch.net/test/read.cgi/tech/1581326256/929
930: デフォルトの名無しさん [sage] 2021/10/18(月) 12:08:52.29 ID:7GcdH/zA さあ ねがいを いえ http://mevius.5ch.net/test/read.cgi/tech/1581326256/930
931: デフォルトの名無しさん [sage] 2021/10/18(月) 15:15:47.20 ID:r9t2S6+p https://www.youtube.com/watch?v=E-48ent631o https://bangumi.ouj.ac.jp/v4/bslife/detail/156936813.html http://mevius.5ch.net/test/read.cgi/tech/1581326256/931
932: デフォルトの名無しさん [sage] 2021/10/22(金) 12:14:30.91 ID:9P3eVRHd Free monad とは何か? の、シンプルかつ的を射た説明がsrackoverflowにあった。 (John Wiegley の回答) https://stackoverflow.com/questions/13352205/what-are-free-monads これを読んでから他の色んなFree monadの記事を読むと、すんなり理解できる。 これ、本質がよく解っている人の回答だよね。 こんな格好良く回答ができるよう精進したい。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/932
933: デフォルトの名無しさん [sage] 2021/10/22(金) 21:20:57.92 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 だと ツ皆ツづ債、ツ静板つソツづ。ツづアツつオツづ」ツつォツつ。ツ? になってしまいます http://mevius.5ch.net/test/read.cgi/tech/1581326256/933
934: デフォルトの名無しさん [] 2021/10/22(金) 23:18:21.74 ID:5ielnrPe haskellってpythonに影響与えてるんやな どおりで雰囲気似てる感じするんか http://mevius.5ch.net/test/read.cgi/tech/1581326256/934
935: デフォルトの名無しさん [] 2021/10/23(土) 01:09:52.51 ID:o3xA5lbA レイアウトと呼ばれるインデントスタイルは、Pythonが1991年に最初にリリースであり、85年以前にあった Mirandaを参考に1990年にHaskellは登場したはず。 http://mevius.5ch.net/test/read.cgi/tech/1581326256/935
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 67 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.888s*