関数型プログラミング言語Haskell Part34 (667レス)
関数型プログラミング言語Haskell Part34 http://mevius.5ch.net/test/read.cgi/tech/1639713446/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
82: デフォルトの名無しさん [] 2022/02/14(月) 11:54:21.19 ID:4AqyxcJv 最近数値計算の勉強してるんですけど、よく最近高速フーリエ変換を用いた乗算の高速化なんて話が出てきます サイズの大きい整数の掛け算とかを高速化する手法で桁数n同士の乗算のコストをn log(n)に抑えるのだとか これGHCのInteger型の乗算には応用されてますかね? やっぱりそこまで速さに拘りたいならご自分でのスタンス? GHCのソースが読めるほどのスキルはないのでよくわからない そもそもGHCのソースってどこに転がってます? http://mevius.5ch.net/test/read.cgi/tech/1639713446/82
83: デフォルトの名無しさん [sage] 2022/02/14(月) 20:10:36.04 ID:TSLH56nb >>82 ghc haskell ソース でググれば見つかる http://mevius.5ch.net/test/read.cgi/tech/1639713446/83
84: デフォルトの名無しさん [sage] 2022/02/14(月) 20:56:01.04 ID:uQiQyHca ソースを1行も読まなくても分かることがいくつかある IntとIntegerの二刀流ができるなら三刀流もできること 第二第三の型を追加するだけのためにコンパイラをコンパイルするのは無意味過ぎること http://mevius.5ch.net/test/read.cgi/tech/1639713446/84
85: デフォルトの名無しさん [] 2022/02/14(月) 21:36:02.36 ID:4AqyxcJv >>82 見つからないorz >>83 ちょっと数値計算の練習したいんですよ 例えば円周率10万桁とか さすがに10万桁とかだとghcはデフォルトでは対応してくれないのかなと 仮にできるにしても10万桁×10万桁の計算で桁数^2オーダーで計算したのではその一個の掛け算で何年もかかってしまうことになりかねません ただのarrayやlistなら10万要素位は扱ってくれそうですけど ただHaskellでその手の大量データを扱うのは色々難しい問題があるらしいと言う話は聞いてたので今までは「そういうのはHaskellは向かない、そういう時はC」とか使い分けてました しかしやはりHaskellでできないのは面白くないのでHaskellでもそういうでかいデータを扱えるスキルを身につけたいなぁというのもあります まぁまだFFTでの掛け算プログラム勉強し始めたばっかりなので先は長そうですけど とりあえず[Double]のFFTと逆FFT作ったとこまではやったんです でもそこまで作って「アレ?もしかしてこんなの自作しなくてもそもそもHaskellのIntegerが最初からFFTで掛け算してるとかあるかも?GHCの開発者メチャメチャ優秀っぽいし」と思った次第 http://mevius.5ch.net/test/read.cgi/tech/1639713446/85
86: デフォルトの名無しさん [] 2022/02/14(月) 21:36:29.77 ID:4AqyxcJv あら、アンカー一個ずれ http://mevius.5ch.net/test/read.cgi/tech/1639713446/86
87: デフォルトの名無しさん [sage] 2022/02/14(月) 21:54:21.41 ID:BjFXlOcH GMP使ってるかもしれないし使ってないかもしれないらしい[1] GMP使ってるならFFTベースのSchonhage-Strassenが働くしGMP使いたいならライブラリ[2]がある [1]https://stackoverflow.com/questions/57688078/what-is-the-algorithm-used-in-integer-multiplication [2]https://hackage.haskell.org/package/integer-gmp http://mevius.5ch.net/test/read.cgi/tech/1639713446/87
88: デフォルトの名無しさん [] 2022/02/14(月) 23:13:34.14 ID:4AqyxcJv >>87 おお、thx なるほどGMPというのを使ってるんですね --Stack excangeより GMP appears to use Schonhage-Strassen, but not until you start dealing with numbers with 10s of thousands of decimal digits. GMPではSchonhage-Strassenを使用しているようですが、小数点以下が何万桁もあるような数字を扱うようになるまでは、このようなことはないようです。 --wikiより GMPは、どんなオペランドの大きさでも他の多倍長整数ライブラリよりも高速であることを目標としている。このために、以下の点を重視している。 基本算術型としてフルワードを使う。 オペランドの大きさによってそれぞれ異なるアルゴリズムを使う。非常に大きな数に有効なアルゴリズムは、小さい数では遅いことが多い。 ---- 要するに自分でわざわざSchonhage-Strassenのアルゴリズム実装しなくてもそもそもintegerで実装済みという事ですね そうじゃないかと思ったw そりゃそうでしょうねぇ、こんな優秀なソフトが数値計算理論の最新の成果取り入れてないわけがないw 10万桁とかIntegerで扱えるのかな? 実はData.FixedにあるFixed aで100桁くらいは余裕というのは確認済みなんです 週末にでも桁数増やして実験してみます ありがとうございました http://mevius.5ch.net/test/read.cgi/tech/1639713446/88
89: デフォルトの名無しさん [sage] 2022/02/15(火) 00:40:37.96 ID:2crEr/EW Haskellの多倍長計算、昔は大変だったけど今はよくなった、みたいな記事が10年前くらいに書かれてた http://tanakh.jp/posts/2012-03-08-pi.html http://mevius.5ch.net/test/read.cgi/tech/1639713446/89
90: デフォルトの名無しさん [] 2022/02/15(火) 19:39:32.71 ID:ujR6VeHM >>89 おお、先人がいたww いや〜Haskellって速さ求めるならあんまりいい選択肢ではなさそうですけどやっぱり挑戦してみたくなりますね その人のページのリンク先がすごく参考になりました ようやくChudnovskyの公式とかいうのがなんで最速なのかわかりました 収束速度そのものはどう考えてもAGMの方が早いのになんでChudnovskyの方が早いんだと Binary Splittingという技使ってまとめて計算していく方法があるんですね ちょっと感動しました まぁともかくInteger型の計算で10億桁くらいまで実用的な?速度で計算できるもんなんですね ボチボチやってみます http://mevius.5ch.net/test/read.cgi/tech/1639713446/90
91: デフォルトの名無しさん [sage] 2022/03/28(月) 00:29:30.89 ID:dN2icdd7 Haskell昔は日本でも人気あったのにどうしてこうなった http://mevius.5ch.net/test/read.cgi/tech/1639713446/91
92: デフォルトの名無しさん [sage] 2022/03/28(月) 00:37:16.39 ID:NMG6YJEi 人気ないって事? そりゃそうでしょ? お世辞にも使いやすいとは言えない http://mevius.5ch.net/test/read.cgi/tech/1639713446/92
93: デフォルトの名無しさん [sage] 2022/03/28(月) 17:03:01.17 ID:o+cr0I/L >>92 使いにくいと感じるところを教えてください http://mevius.5ch.net/test/read.cgi/tech/1639713446/93
94: デフォルトの名無しさん [sage] 2022/03/28(月) 18:04:03.42 ID:kSkV8rOb 文字列操作のパッケージを作っている。 1文字づつ評価して処理するのは出来るけど ループで実現しようとすると、上手くいかない。 [Char]型とString型で混ぜて作ったせいか ボトムアップ方式で作るのが間違えなのか。 まだまだ初心者の愚痴。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/94
95: デフォルトの名無しさん [sage] 2022/04/07(木) 21:21:24.28 ID:v9cHeTKb Stringは[Char]の別名だが http://mevius.5ch.net/test/read.cgi/tech/1639713446/95
96: デフォルトの名無しさん [sage] 2022/04/08(金) 04:13:38.57 ID:ZfK1p/yR Haskell-jp slackってどうなの? http://mevius.5ch.net/test/read.cgi/tech/1639713446/96
97: デフォルトの名無しさん [sage] 2022/04/08(金) 13:18:29.82 ID:7u/c8YSR とりあえず入ってみたら? http://mevius.5ch.net/test/read.cgi/tech/1639713446/97
98: デフォルトの名無しさん [sage] 2022/05/25(水) 23:07:08.21 ID:HGLTMsh1 >>91 純粋関数型といいつつ実際にはそうではないし 結局はモナドも使わなきゃ実用的なものは作れない よく例題に上がるようなシンプルな書き方すると遅いし Lispでも同じようにあった問題で綺麗な書き方よりも早い書き方が重視される そうこうしているうちにどんどん人は離れていったよ 理念が現実に負けたのだと思う・・ http://mevius.5ch.net/test/read.cgi/tech/1639713446/98
99: デフォルトの名無しさん [sage] 2022/05/25(水) 23:31:09.11 ID:HGLTMsh1 あとそうだ なによりもデバッグがあまりに困難すぎるし デバッグのために型制約とか何バカやってんだろな・・って思うことしばしば 作業環境が悪いのがまるで改善されないから嫌になる http://mevius.5ch.net/test/read.cgi/tech/1639713446/99
100: デフォルトの名無しさん [sage] 2022/05/27(金) 23:36:10.66 ID:IybSybG6 型はコンパイル時にしか存在しない モナドクラスもコンパイル時にしか使わない 実行時に使われているのはモナドのインスタンスのみ そのインスタンスは任意の言語で再発明できる どの言語でデバッグしても困難は同じ 結局は再発明をやらなきゃ実用的な知識が身につかない http://mevius.5ch.net/test/read.cgi/tech/1639713446/100
101: デフォルトの名無しさん [sage] 2022/05/27(金) 23:58:56.33 ID:IeVDSTdQ 今だにprintfデバッグに頼ってるなんてHaskellくらいのものかもね・・ http://mevius.5ch.net/test/read.cgi/tech/1639713446/101
102: デフォルトの名無しさん [sage] 2022/05/28(土) 00:21:10.26 ID:1xwNIN3l Cのライブラリに丸投げする効率化を考えれば デバッグの効率化にはこだわらない方が丸投げしやすい http://mevius.5ch.net/test/read.cgi/tech/1639713446/102
103: デフォルトの名無しさん [sage] 2022/07/18(月) 03:26:49.61 ID:zDzunRmU なんでここまで人気なくなったんだろうな http://mevius.5ch.net/test/read.cgi/tech/1639713446/103
104: デフォルトの名無しさん [sage] 2022/07/18(月) 14:14:58.82 ID:IRYfc5Qz 声の大きい人たちが使わなくなっただけでは http://mevius.5ch.net/test/read.cgi/tech/1639713446/104
105: デフォルトの名無しさん [sage] 2022/07/19(火) 17:39:52.93 ID:6V/PH7AR 個人が言語を自作できるレベルになってる説 団体は必須ではない http://mevius.5ch.net/test/read.cgi/tech/1639713446/105
106: デフォルトの名無しさん [sage] 2022/08/07(日) 20:06:46.56 ID:My+goEll ハマりました 次のコード通らん理由が分からん import Data.Ratio [[ a,b],[c,d]] *** [[ p,q],[r,s]] = [ [ a*p+b*r, a*q+b*s], [c*p+d*r],[c*q+d*s]] i [[ a,b],[c,d]] = [[d,-b],[-c,a]] a :: [[Rational ]] b:: [[Rational ]] a = [[1%1,99],[0,100]] b = [[100,0],[-99,1]] main = do mapM_ print $ [ a, b , i a , i b] print $ (( i b ) *** ( i a ) ) *** b 実行時エラーで prog: prog.hs:4:1-79: Non-exhaustive patterns in function になる 一項目のprintの出力 [[1 % 1,99 % 1],[0 % 1,100 % 1]] [[100 % 1,0 % 1],[(-99) % 1,1 % 1]] [[100 % 1,(-99) % 1],[0 % 1,1 % 1]] [[1 % 1,0 % 1],[99 % 1,100 % 1]] を見てもどう見てもパターンマッチしてるのに? 何故? http://mevius.5ch.net/test/read.cgi/tech/1639713446/106
107: デフォルトの名無しさん [sage] 2022/08/08(月) 19:26:19.73 ID:NwZYLTPj >>106 リストの長さがマッチしてない 長さが2でないリストをどこで作ったのかはソースを読めば分かる ***は長さが3のリストを返す http://mevius.5ch.net/test/read.cgi/tech/1639713446/107
108: デフォルトの名無しさん [sage] 2022/08/09(火) 10:46:53.89 ID:VUIfOlq+ >>107 あ、ホントだ コピペミスかなんかか thx http://mevius.5ch.net/test/read.cgi/tech/1639713446/108
109: デフォルトの名無しさん [sage] 2022/08/11(木) 18:04:41.32 ID:9dSVJvSP おまいらこのクソ暑い夏をどうにかするCOOLなコードをHaskellで簡潔に書けんのか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/109
110: デフォルトの名無しさん [sage] 2022/08/25(木) 11:20:55.19 ID:97f0Pf6Z ttps://hackage.haskell.org/package/mtl-2.3/docs/src/Control.Monad.Writer.Class.html#tell listen ~(w, a) = (w, (a, w)) この~はどういう文法なの? http://mevius.5ch.net/test/read.cgi/tech/1639713446/110
111: デフォルトの名無しさん [sage] 2022/08/25(木) 21:14:39.81 ID:+PRPT5FW https://www.sampou.org/haskell/tutorial-j/patterns.html#tut-lazy-patterns http://mevius.5ch.net/test/read.cgi/tech/1639713446/111
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 556 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.012s