関数型プログラミング言語Haskell Part34 (667レス)
関数型プログラミング言語Haskell Part34 http://mevius.5ch.net/test/read.cgi/tech/1639713446/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
31: デフォルトの名無しさん [sage] 2021/12/31(金) 20:42:25.11 ID:aP8qPSMg >>30のこれ iterator (0:1:xs) = 1 + (iterator xs) 内部で 1+1+1+1+...が積みあがって最後に計算されるの? http://mevius.5ch.net/test/read.cgi/tech/1639713446/31
32: デフォルトの名無しさん [] 2021/12/31(金) 20:58:03.01 ID:bqUePCKa >>31 それは処理系のimplement依存だから一概には言えないけど多分stack上に(1+)関数が乗っていって最後に確定した0が入ってから計算しそうな気がする http://mevius.5ch.net/test/read.cgi/tech/1639713446/32
33: デフォルトの名無しさん [sage] 2021/12/31(金) 21:10:21.51 ID:aP8qPSMg >>32 了解しました http://mevius.5ch.net/test/read.cgi/tech/1639713446/33
34: デフォルトの名無しさん [sage] 2022/01/02(日) 20:44:02.99 ID:OOMiLRw0 >>30ちょと改変 wc6 = let iter n [] = z iter n (False:True:xs) = let n' = n + 1 in seq n' $ iter n' xs iter n (x:xs) = iter n xs in (iter 0) . (False :) wcc = wc6 . map chkspand2 これのseq n'が効けば+1+1+1+1が積みあがらないはず http://mevius.5ch.net/test/read.cgi/tech/1639713446/34
35: デフォルトの名無しさん [sage] 2022/01/02(日) 21:09:40.82 ID:OOMiLRw0 ghciで確認 >>30はスタックオーバーフローで止まった >>34は止まらないからctr-Cで止めた http://mevius.5ch.net/test/read.cgi/tech/1639713446/35
36: デフォルトの名無しさん [sage] 2022/01/03(月) 00:17:58.15 ID:eS7vipFo OOPでも、整数を他のオブジェクトとは全然違う形式にしないと 計算が遅過ぎてダサくなるよね 逆にオブジェクトの方を整数と同じようなGC非依存みたいな構造にする手もあるか http://mevius.5ch.net/test/read.cgi/tech/1639713446/36
37: デフォルトの名無しさん [] 2022/01/03(月) 08:08:25.82 ID:hLrwvjQQ まぁコレは趣味による Haskellでは性能面より可読性を重視するからな それも使う人次第だけど >>34のようにすればメモリも時間も節約できるけど可読性は失われる どこまで我慢するかだけどオレは計算時間もメモリも線形までなら我慢して可読性を重視する >>34だと入力に比例して要求されるスタック量が増える 線形までならしょうがないと思う どのみち入力が大きくなるにつれてシステムが大きくなるのは元々しょうがないんだしその時の比例定数の違いまでなら我慢
する 今具体的にやりたいことがあってその線形オーダーの無駄すら許されない状況なら考えるけど http://mevius.5ch.net/test/read.cgi/tech/1639713446/37
38: デフォルトの名無しさん [sage] 2022/01/03(月) 11:20:12.64 ID:TEX8BSo6 >>37 今回のお題はワードカウント、ファイルサイズがギガになる場合を想定 スタックなりヒープなりを消費しない手法は?です Cなどで実装した場合、ループでカウントして再帰なしスタックもヒープも消費なしとか(可読性は...) 他にマルチスレッドで分割カウントした時の手法とか(ディスクのIOで律速か) http://mevius.5ch.net/test/read.cgi/tech/1639713446/38
39: デフォルトの名無しさん [] 2022/01/03(月) 12:59:34.38 ID:hLrwvjQQ 今回の場合1ワード消費するたびにスタック一個消費するから必要なメモリリソースが倍以上になる可能性もあるから意味はあるかな 特にコレは>>34の方法だと必要なメモリリソースがデータ保持する分を除けばlogオーダーになるからな しかも読み込んだデータは順次捨てていけるし(そこまでのカウント結果を保持しないといけないので有限オートマトンでは無理だけど有限オートマトン以上、チューリング完全以下、こういう計算クラスは名前ついてるのかな?) 個人的にはこう
いうときメモリ線形、時間線形までは許さないと大した事できないことが多いのでそれ以上のこだわりは持たないようにしてる 数学的研究対象とかにするなら別だけど http://mevius.5ch.net/test/read.cgi/tech/1639713446/39
40: デフォルトの名無しさん [sage] 2022/01/03(月) 15:29:08.17 ID:TEX8BSo6 >>39 今回なにを確認したのか それは、Cで組むような単純繰り返しを同じ感覚でヒャッハーとhaskellの遅延評価で行うと ヤバイと言う教訓とそれを回避する手法 http://mevius.5ch.net/test/read.cgi/tech/1639713446/40
41: デフォルトの名無しさん [] 2022/01/04(火) 16:11:04.31 ID:h755Av8k Haskellを身に付けた人は他の言語も使えると予想しますが、いくつもの言語の中からHaskellを選んで プログラムを書くのはどんな課題、問題を解決したいときなんでしょうか http://mevius.5ch.net/test/read.cgi/tech/1639713446/41
42: デフォルトの名無しさん [sage] 2022/01/04(火) 16:44:18.80 ID:HuVGMWib 課題が「ガベージをコレクトしたい」だけだったとしても じゃあ静的型は不要だとかジェネリクスは不要だとはならない だから課題と関係ない部分を作り込む http://mevius.5ch.net/test/read.cgi/tech/1639713446/42
43: デフォルトの名無しさん [] 2022/01/05(水) 10:28:01.47 ID:imDyM2+l Twitterの検索で @ohagiya @kenokabe と入れると楽しいよな http://mevius.5ch.net/test/read.cgi/tech/1639713446/43
44: デフォルトの名無しさん [] 2022/01/11(火) 17:47:50.88 ID:rZde0CTm >>43 ひどすぎるだろこれ 可哀想に http://mevius.5ch.net/test/read.cgi/tech/1639713446/44
45: デフォルトの名無しさん [] 2022/01/14(金) 10:48:22.13 ID:3PF6dXYX 最新の怪文書も読んだけどさ、毛の壁は毎回毎回威勢だけは良いんだよなw たとえば「ちくわは民事でもやる!」「ちくわはもう詰み」(9年前) 「ちくわはもう死に体」(7年前)とかさ。 死に体なのに、つい最近もブログで恨み節w ネズミ一匹、始末できないなんてだらしがないな http://mevius.5ch.net/test/read.cgi/tech/1639713446/45
46: デフォルトの名無しさん [] 2022/01/15(土) 18:49:30.83 ID:chCIM2fB 質問です array と List の性能の差がいまいちピンと来ません 何か「この例ではどう考えてもarray、ほらこんなに性能に差が出る」って例ご存知ないですか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/46
47: デフォルトの名無しさん [] 2022/01/16(日) 12:22:44.80 ID:f2QwXzzi 質問です 何かの文章で square x = x*x print $ square $ square 3 のようなプログラムをHaskell は square $ square 3 → square ( square 3 ) → ( square 3 ) * ( square 3 ) → ( 3 * 3 ) * ( 3 * 3 ) のようになる コレを避けるためにseqを使えばよいとあったのですが試しに import Debug.Trace square x = x * x const3 = trace "*" 3 main = do print $ square $ square $ square $ square $ square $ square $ square $ square $ square $ square $ sq
uare $ square $ square $ square $ square $ const3 みたいなプログラムで試してみました もし説明通りならconst3が2^15回呼ばれて*がいっぱい出てきそうですが、やってみると*は一個しか出てきません コレは何故ですか? ちなみにghcです ghcがconst3の結果を自分で勝手に“メモ化”してよきにはからってくれているんでしょうか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/47
48: デフォルトの名無しさん [sage] 2022/01/16(日) 13:40:56.61 ID:rC9oNTrC メモ化は独自実装ではなく仕様 何かの文章は嘘 でも騙されたことがないので被害が存在しないし、加害者も存在しない http://mevius.5ch.net/test/read.cgi/tech/1639713446/48
49: デフォルトの名無しさん [] 2022/01/16(日) 14:36:08.72 ID:f2QwXzzi >>48 仕様なんですか? Language Reportかなんかに書いてありますか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/49
50: デフォルトの名無しさん [] 2022/01/16(日) 14:39:15.35 ID:f2QwXzzi 何かの文章は "ウォークスルー Haskell" というやつでした http://walk.northcol.org/haskell/eval-strategies/ 3 ではなく 1 + 2 でやってました http://mevius.5ch.net/test/read.cgi/tech/1639713446/50
51: デフォルトの名無しさん [sage] 2022/01/16(日) 18:39:45.50 ID:ZlAL8rfa seqだと結果はどうなるんですか? http://mevius.5ch.net/test/read.cgi/tech/1639713446/51
52: デフォルトの名無しさん [] 2022/01/16(日) 18:54:16.95 ID:f2QwXzzi >>51 square x = x * x を square x = seq x $ x * x にして明治的に“xを評価してからx*xを計算せよ”に変えるともちろん*ひとつです それは納得いきます ウォークスルーHaskellにもそうなると書いてあるしHaskell Language Report 2010にもseqで正格評価になると書いてあります なのでコレは納得いくんですがseqなしの場合の動作が文書と異なるように見えます もちろん参照透過性があるので一度計算した結果をメモ化して再利用しても同じ答えにならないといけない
ので答え自体は同じになるわけですけど コレはたまたまGHCの開発者が優秀でHaskellの標準動作としては保証されない事までやってくれてるだけなのか、標準動作としてメモ化しないといけないことになってるのかどっちだろうと 今のところ今自分が勉強してるプログラムにはseq入れて明治的に正格評価してもらってるんですけど標準でメモ化してくれるなら消せるしスッキリするし、あるいは明示しないと他の処理系だとしてくれないなら残しとかないといけないし http://mevius.5ch.net/test/read.cgi/tech/1639713446/52
53: デフォルトの名無しさん [] 2022/01/17(月) 04:24:56.47 ID:FNscPcIY 銀の弾丸のHaskellをIT企業が採用したら市場を席捲できるのでは??? 実際そうなると思う? http://mevius.5ch.net/test/read.cgi/tech/1639713446/53
54: デフォルトの名無しさん [sage] 2022/01/17(月) 13:17:04.94 ID:3dpBVALW Windows10にVSCode入れて、Haskellを遊ぼうとしたけど上手く入らない。 コマンドラインで細かく入れて遊ぶしかないかな。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/54
55: デフォルトの名無しさん [sage] 2022/01/18(火) 00:23:47.53 ID:1uCkeDxh https://www.haskell.org/ghcup/ >GHCup is an installer for the general purpose language Haskell. http://mevius.5ch.net/test/read.cgi/tech/1639713446/55
56: デフォルトの名無しさん [] 2022/01/27(木) 08:50:29.18 ID:NJ4yaxSd https://qiita.com/lucker_summer/items/baa68e681872de44d5f8 コメント欄ひどすぎだろ @stken2050(これ岡部健)が非道いので皆さん通報してほしい http://mevius.5ch.net/test/read.cgi/tech/1639713446/56
57: デフォルトの名無しさん [sage] 2022/01/27(木) 10:10:34.06 ID:orDFdZXN 毛さんは昔から色々酷いが >>56のコメ欄の流れだけでいうと単に@Zuishinが分が悪いわ 珍妙な独自用語は早めに芽を摘まないといけない http://mevius.5ch.net/test/read.cgi/tech/1639713446/57
58: デフォルトの名無しさん [] 2022/01/27(木) 11:59:44.42 ID:oUTYjCet 岡部さんこんにちは http://mevius.5ch.net/test/read.cgi/tech/1639713446/58
59: デフォルトの名無しさん [] 2022/01/27(木) 12:03:44.88 ID:eY59BLQP https://twitter.com/mutamac/status/322296035147935744 引用 「Linuxの元になったMINIXが復権中。期待。」という自称ギークとの話』の魚拓を取りました http://nmuta.dip.jp/~muta/toog237.pdf https://twitter.com/5chan_nel (5ch newer account) http://mevius.5ch.net/test/read.cgi/tech/1639713446/59
60: デフォルトの名無しさん [] 2022/01/27(木) 23:00:32.74 ID:7u9WcLA6 そうじゃなくて、PHPやHaskellごときが偉そうにすんなって事だろ。 質問者が来たらお茶菓子くらい出せ。 底辺やマイナー言語はそうするべき。 http://mevius.5ch.net/test/read.cgi/tech/1639713446/60
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 607 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s