関数型プログラミング言語Haskell Part34 (667レス)
関数型プログラミング言語Haskell Part34 http://mevius.5ch.net/test/read.cgi/tech/1639713446/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
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
37: デフォルトの名無しさん [] 2022/01/03(月) 08:08:25.82 ID:hLrwvjQQ まぁコレは趣味による Haskellでは性能面より可読性を重視するからな それも使う人次第だけど >>34のようにすればメモリも時間も節約できるけど可読性は失われる どこまで我慢するかだけどオレは計算時間もメモリも線形までなら我慢して可読性を重視する >>34だと入力に比例して要求されるスタック量が増える 線形までならしょうがないと思う どのみち入力が大きくなるにつれてシステムが大きくなるのは元々しょうがないんだしその時の比例定数の違いまでなら我慢する 今具体的にやりたいことがあってその線形オーダーの無駄すら許されない状況なら考えるけど http://mevius.5ch.net/test/read.cgi/tech/1639713446/37
39: デフォルトの名無しさん [] 2022/01/03(月) 12:59:34.38 ID:hLrwvjQQ 今回の場合1ワード消費するたびにスタック一個消費するから必要なメモリリソースが倍以上になる可能性もあるから意味はあるかな 特にコレは>>34の方法だと必要なメモリリソースがデータ保持する分を除けばlogオーダーになるからな しかも読み込んだデータは順次捨てていけるし(そこまでのカウント結果を保持しないといけないので有限オートマトンでは無理だけど有限オートマトン以上、チューリング完全以下、こういう計算クラスは名前ついてるのかな?) 個人的にはこういうときメモリ線形、時間線形までは許さないと大した事できないことが多いのでそれ以上のこだわりは持たないようにしてる 数学的研究対象とかにするなら別だけど http://mevius.5ch.net/test/read.cgi/tech/1639713446/39
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
1.165s*