1 名前:デフォルトの名無しさん mailto:sage [2017/01/15(日) 23:43:54.28 ID:Vh4eztBk.net] 関数型プログラミング言語 Haskell について語るスレです。 haskell.org (公式サイト) www.haskell.org/ 前スレ 関数型プログラミング言語Haskell Part28 echo.2ch.net/test/read.cgi/tech/1428597032/
156 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 08:37:50.87 ID:iKIs1hpk.net] 遅いと言われようと、フィボナッチ数列をzipWithで1行で書ける言語というところに魅力を感じている (そんなに何度もフィボナッチ数列を書く機会があるわけではないが表現力の一例として)
157 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 10:28:30.13 ID:nCBINic8.net] 1行フィボナッチって結構あるんだな全然知らなかった https://wiki.haskell.org/The_Fibonacci_sequence
158 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 13:55:10.09 ID:gJ+iD/w/.net] パスカルの三角形を出したいんだけど、 ++使ってるのが気に食わないのだがうまく消せなかった import Data.List (unfoldr) pastri :: [[Int]] pastri = unfoldr (\l -> Just (l, body l)) [1] where body xs = 1 : zipWith (+) xs (tail xs) ++ [1] main = mapM_ print $ take 15 pastri
159 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 19:08:56.34 ID:ishbEDrB.net] 型に関数型のデータを持たせることはできますか? GHC.TypeLitsで自然数型のデータをもたせることは出来ましたがどうやら関数型は無いようです ニュアンスとしては以下のような事をやりたいです newtypeでaを定義し直しMonoidのインスタンスにすれば同じ処理は出来ますが 冗長性を省いてシンプルに記述したいです newtype Hoge (f :: a->a->a) (a :: *) = Hoge a deriving Show instance (Num a) => Monoid (Hoge f a) where mempty = Hoge 0 (Hoge x) `mappend` (Hoge y) = Hoge (f x y)
160 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 20:56:35.22 ID:BpdtDTW+.net] data Hoge a = Hoge (a -> a -> a) a これだとHoge f 0とHoge g 0の型は同じになってしまう 引数fをgに変えると戻り値の型が変わるような関数Hogeは動的言語なら作れるかも
161 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 21:34:57.67 ID:WL7YVLDK.net] >>156 長さが異なるリスト同士の zipWith で、短い方の末尾をデフォルト値で補って長さを揃える、 そんな関数 zipWith' を作ってはどうでしょうか。 zipWith' :: (a -> a -> a) -> a -> [a] -> [a] -> [a] zipWith' _ _ [] [] = [] zipWith' f d [] (y:ys) = f d y : zipWith' f d [] ys zipWith' f d (x:xs) [] = f x d : zipWith' f d xs [] zipWith' f d (x:xs) (y:ys) = f x y : zipWith' f d xs ys これを使えば、例えば [1, 3, 3, 1] から [1, 4, 6, 4, 1] は次のようにして作れます。 let xs = [1, 3, 3, 1] zipWith' (+) 0 xs (0 : xs) この関数は一方だけでも無限リストだと止まらないので注意が必要ですが、 ときどき役に立つので私は自分のツールボックスに入れています。
162 名前:デフォルトの名無しさん mailto:sage [2017/02/17(金) 22:22:44.78 ID:nCBINic8.net] パスカルの三角形はロゼッタコードにあるのが限界でしょ Pascal's triangle - Rosetta Code https://rosettacode.org/wiki/Pascal%27s_triangle#Haskell
163 名前:デフォルトの名無しさん mailto:sage [2017/02/18(土) 01:35:58.15 ID:4ADoOqjk.net] >>156 以前にこんなのを書いたことがある pascal :: (Integral a) => [[a]] pascal = map (1:) $ (:) (repeat 0) $ zipWith (zipWith (+)) pascal $ map tail pascal -- pascal => [ [1,0,0,..], [1,1,0,0,..], [1,2,1,0,0,..], [1,3,3,1,0,0,..], .. ] 2重リストなんで見た目複雑だけど発想としては fib = 0:1: zipWith (+) fib (tail fib) とほぼ同じ
164 名前:デフォルトの名無しさん mailto:sage [2017/02/18(土) 12:34:28.15 ID:OQ3VgdS2.net] ++をネタにする作者の気持ちをスルーしてパスカルの三角形を熱く語る 理系の鑑
165 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 07:14:56.06 ID:rxEXn9HF.net] pascal = map (takeWhile (/= 0)) $ iterate (\xs -> 1 : zipWith (+) xs (tail xs)) (1 : repeat 0) melpon.org/wandbox/permlink/HLKtAXzGodOF3ZGP
166 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 10:09:57.42 ID:obWbRffz.net] ところで・・・ コメントを読まなくても、どのように計算しているのかがぱっと見て分かる、 それが関数型が持つ高い宣言性の良いところ。 また、そのようにプログラムしても、もともとGHCが持つ優秀な最適化能力や、 プログラムの見た目を壊すことなく最適化を促すことができる仕組みのおかげで、 結果的にかなり効率の良い処理がなされる実行ファイルが出力される。 (実用的なアプリケーションで十分に耐えられる) にも関わらず、そのメリットをあえて潰すようなプログラムをする人が稀にいるが、 純粋関数型のHaskellを使っておきながら、他に優先すべき事項があるのだろうか。 まぁ、縛りパズルをして遊んでいるのなら分かるが。
167 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 11:37:29.74 ID:TYcfVj75.net] 今ここで言う必要のないものを必要と思い込むことも縛りのパターンの一つ
168 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 18:51:42.32 ID:rxEXn9HF.net] どうしても難解になりがちはワンライナーやコードゴルフで遊ぶのは人の自由だと思うけど遊び以外で使うのはたしかにどうかと思う
169 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 19:20:27.12 ID:Mzz/1Hry.net] ポイントフリー教も1変数のパイプみたいなやつならまだ分かるのだが (中間変数が無くなるから効率が上がるという話もある、 そのくらいGHCが最適化してくれてもよさそうなのに) 2変数以上になると完全に暗号めいてて困る
170 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 20:52:17.90 ID:TYcfVj75.net] xss = (1 : repeat 0) : [ zipWith (+) (0 : xs) xs | xs <- xss ] pascal = [ takeWhile (/=0) xs | xs <- xss ] これは2変数というか2重ループ それと再帰のために自分自身に名前をつけた時点でポイントフリーは諦めている筈
171 名前:デフォルトの名無しさん mailto:sage [2017/02/19(日) 23:43:55.15 ID:rxEXn9HF.net] ポイントフリーって何?こういうこと? pascal = map (takeWhile (/= 0)) $ iterate ((1 :) . map sum . transpose . take 2 . tails) (1 : repeat 0) melpon.org/wandbox/permlink/bYSi5tfNVy5zfzPg
172 名前:デフォルトの名無しさん mailto:sage [2017/02/20(月) 00:18:45.73 ID:mtupkOQi.net] 変数名かんがえたくないときポイフリできたらしちゃうことある
173 名前:デフォルトの名無しさん [2017/02/20(月) 00:20:11.39 ID:bFWxmJHr.net] ArrowLoopの解釈はこれで合ってるの? tamae.2ch.net/test/read.cgi/dame/1439747269/241-242n
174 名前:デフォルトの名無しさん mailto:sage [2017/02/20(月) 20:56:54.49 ID:uIdMc98M.net] ArrowLoopがどういうインターフェイスなのかいまいちよく分からないけど その定義でどう動くかはfによるとしか・・・
175 名前:デフォルトの名無しさん mailto:sage [2017/02/20(月) 22:57:03.60 ID:tib6qfwe.net] 結局ハードウェアの動きとあまりに乖離しすぎてるってのが 普及しない理由じゃないかと。
176 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 04:45:41.06 ID:bkUsfADx.net] 量子コンピュータが普及する時は言語どうなるんかな CPUに合わせた新しい言語になるのか、今の言語をベースにコンパイラに任せるのか 原理とか全く知らなくて言ってるけど
177 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 11:55:34.70 ID:hz5m2IGZ.net] メモリとCPUが分離しすぎているおかげでメモリ上のデータ構造に変化がない OOPははそこを変えようとしたのか 分離するのやめれば破壊的イノベーションが起きるのではと
178 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 19:46:11.18 ID:CLRDv6M0.net] ほんとぉ?
179 名前:デフォルトの名無しさん mailto:sage [2017/02/21(火) 22:11:08.30 ID:3rYbm5Zu.net] golangはOOPとは違うような
180 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 01:32:49.98 ID:doFig/5A.net] tanakh神って色々とやられておられるのですね hackage.haskell.org/user/HideyukiTanaka
181 名前:デフォルトの名無しさん mailto:sage [2017/02/22(水) 11:25:20.39 ID:C8G0Nbdq.net] ContrainedなFunctorを実装していて直面した問題です 問題の本質を以下の単純化したコードで例示します 最後2つのインスタンス宣言の間で"Duplicate instance declarations" エラーが発生してしまいます これは型aがOldAとUsefulFoo両方のクラスのインスタンスである場合どちらのnewHogeを実行すればいいのか区別がつかないからですが 実用上このケースは無意味で意図してコードを書かなければ起こり得ません OldAとUsefulFooの両方のインスタンスになるような型が存在しないことをghcに伝えられればエラーにしなくても良いと思うのですがそのようなテクニックや言語拡張はあるのでしょうか {-# LANGUAGE FlexibleInstances, UndecidableInstances #-} class OldA a where hoge :: a -> a class NewA a where newHoge :: a -> a class UsefulFoo a where us :: a -> a ef :: a -> a ul :: a -> a instance OldA a => NewA a where newHoge = hoge instance UsefulFoo a => NewA a where newHoge = us . ef . ul
182 名前:デフォルトの名無しさん [2017/02/23(木) 00:49:33.52 ID:9wlFqT9C.net] 諦メロン
183 名前:デフォルトの名無しさん mailto:sage [2017/02/23(木) 06:24:32.19 ID:1D9YdnQF.net] >>178 最近はRustに御執心の様子
184 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 02:19:21.58 ID:bZ+UJBqj.net] >>179 OldAとUsefulFooとNewAの設計方針が間違っていたのでは?
185 名前:デフォルトの名無しさん mailto:sage [2017/02/24(金) 11:52:40.03 ID:e/BP7pNw.net] 最新のGHCは簡単な余再帰が末尾再帰に変換されて最適化かかるの?
186 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 01:04:24.08 ID:wcM+rtIC.net] >>182 melpon.org/wandbox/permlink/2dkmGhuBxpuIXnLU ↓ melpon.org/wandbox/permlink/zMLvKlMSoP1i5EFb
187 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 06:14:09.47 ID:rUogqkUr.net] これがアスペか
188 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 06:24:01.20 ID:E4CT8R9/.net] fib_mem :: Int -> Integer fib_mem = (map fib [0..] !!) where fib 0 = 1 fib 1 = 1 fib n = fib_mem (n-2) + fib_mem (n-1) https://www.packtpub.com/mapt/book/Application%20Development/9781786464217/1/ch01lvl1sec09/Memoization+and+CAFs フィボナッチは前スレのこれが美しすぎた。 これを見た後では zipWithのフィボナッチとか完全に霞んで見える。
189 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 11:33:38.62 ID:J8MTJSeU.net] 数式に近いから美しいって言ってるのかもしれないけど それは fib_mem :: Int -> Integer fib_mem x = _fibs !! x _fibs = map _fib [0..] _fib 0 = 1 _fib 1 = 1 _fib n = fib_mem (n-2) + fib_mem (n-1) みたいに一時データがユニークになるって話だから メモ化されるって言ってもO(n^2)だけどな
190 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 12:20:37.16 ID:5RveVCtH.net] こんな所で感動しちゃってどうするの そういうのは万策尽きて神頼みするような時だけいい 数学に感情は不要
191 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 18:51:36.03 ID:A0aZ5Z9S.net] 初歩的なメモ化で感動できた頃の心の輝きは大切にしていきたい
192 名前:デフォルトの名無しさん mailto:sage [2017/02/25(土) 18:58:12.64 ID:A0aZ5Z9S.net] メモ化してトップダウンするより足していってボトムアップの要領の良さが勝つ回
193 名前:デフォルトの名無しさん mailto:sage [2017/02/26(日) 22:44:13.60 ID:+sRU0DuI.net] stack new して作ったプロジェクトでライブラリを作りました。 (cabal ファイルに executable の代わりに library の項目を書いた) stack build して正しくビルドされたことを確認してから stack install しました。 この後、別の stack new したプロジェクトで、先程 stack install したライブラリを使用するには、 どうすればよいのでしょうか。
194 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 10:48:09.56 ID:TbO8J9W/.net] stack.yamlのpackagesから設定できるよ、stack installはしなくて良い https://docs.haskellstack.org/en/stable/yaml_configuration/
195 名前:デフォルトの名無しさん mailto:sage [2017/02/27(月) 22:42:50.07 ID:6zX/SjR0.net] >>192 出来ました。 ありがとうございました。
196 名前:デフォルトの名無しさん mailto:sage [2017/03/01(水) 13:33:54.14 ID:5kGyNHm4.net] 諸君、議論したまえ
197 名前:デフォルトの名無しさん [2017/03/02(木) 08:35:24.25 ID:jHvj97KG.net] tamae.2ch.net/test/read.cgi/prog/1475046306/812n Haskellerが現れた
198 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 19:44:44.66 ID:BYkqMHF2.net] 新しく出たHaskell本の感想クレクレ
199 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 20:21:59.21 ID:j+wBUtqM.net] 前書きだけ立ち読みしたけど あれ関数プログラミング入門を書き直したものなんだな
200 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 20:28:33.59 ID:MHxEW6Wj.net] 古い方持ってたら不要なのね
201 名前:デフォルトの名無しさん mailto:sage [2017/03/06(月) 23:01:20.41 ID:WL27y1mu.net] マジかよ危うく買うところだった
202 名前:デフォルトの名無しさん mailto:sage [2017/03/07(火) 00:14:37.81 ID:+xePePxn.net] かなり書き直してるよ
203 名前:デフォルトの名無しさん mailto:sage [2017/03/07(火) 10:44:02.94 ID:mr++RUpk.net] Bird氏の本の第三版か。 あの人、Functional Programmingの大御所なんだね。 すごいHやGraham氏、その他日本人著者の書いたのをいろいろ読んだけど、 コアな部分を理解するならBird氏の本だと思った。 翻訳第二版のファンシーな表紙をやめて、 原著の表紙の虎を持ってきたのは何かあったのだろうか?ww
204 名前:デフォルトの名無しさん mailto:sage [2017/03/07(火) 13:07:01.84 ID:H+HmLSCA.net] >>201 コアと言うのは、例えばどんな部分?
205 名前:デフォルトの名無しさん mailto:sage [2017/03/07(火) 13:38:15.87 ID:fYd9KAIw.net] と思ったらそもそも関数プログラミング入門買ってなかったのでこれを機会に買おう
206 名前:デフォルトの名無しさん mailto:sage [2017/03/07(火) 17:44:15.63 ID:rdG5C9r5.net] kinkyな表紙にしてくれ
207 名前:デフォルトの名無しさん mailto:sage [2017/03/07(火) 17:49:10.46 ID:mr++RUpk.net] >202 最初から正格、非正格を念頭に置いた上で議論が進んでいく。その時点で既に毛色が違う。 豆知識として、リスト内包表記とdo構文の<-の関係も載ってた。 証明問題が多く、数学がわかんないときつい感じ。
208 名前:デフォルトの名無しさん mailto:sage [2017/03/07(火) 20:23:58.44 ID:36OrCepo.net] >>205 あぁなるほど、そう言うのを一般に「コア」って言うのか ありがと
209 名前:デフォルトの名無しさん mailto:sage [2017/03/08(水) 06:06:40.10 ID:XWjfITmE.net] https://stackoverflow.blog/2017/02/07/what-programming-languages-weekends/
210 名前:デフォルトの名無しさん mailto:sage [2017/03/08(水) 06:44:38.74 ID:KZ+JXzQR.net] 今更すぎる 和訳で知ったのに原文貼って物知り顔するな
211 名前:デフォルトの名無しさん mailto:sage [2017/03/08(水) 12:31:57.39 ID:RBmx3E25.net] >>207 週末に人気のあるプログラミング言語(StackOverflow調べ) https://developers.srad.jp/story/17/02/09/0354232/ 週末にいちばん多く使われるプログラミング言語は? postd.cc/what-programming-languages-weekends/
212 名前:デフォルトの名無しさん [2017/03/11(土) 21:23:14.84 ID:uo9d8gfu.net] Haskellにも依存型があと数年以内に組み込まれるらしいですが、使用目的は専ら型安全性を得るためなのでしょうか?
213 名前:デフォルトの名無しさん mailto:sage [2017/03/11(土) 23:30:29.33 ID:UHyrmxcZ.net] 定理証明支援系はいつですか?
214 名前:resumi [2017/03/12(日) 01:08:56.73 ID:f0Kjw9v5.net] これ普通にショックだね。。 本当なの?? https://goo.gl/RB0asw
215 名前:デフォルトの名無しさん mailto:sage [2017/03/12(日) 01:54:17.97 ID:kqHBJY7y.net] 見てないけどグロ
216 名前:デフォルトの名無しさん mailto:sage [2017/03/12(日) 22:59:29.77 ID:fpOKmvSG.net] 最新のGHCだと余再帰が可能な限り自動で末尾再帰に変換されて最適化がかかるって聞いたんですけど本当すか?
217 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 08:05:36.75 ID:0mFH2buk.net] tanakhに訊け
218 名前:デフォルトの名無しさん mailto:sage [2017/03/13(月) 10:55:02.44 ID:dlgNAjv1.net] tanakhとかうざ
219 名前:デフォルトの名無しさん mailto:sage [2017/03/14(火) 22:01:52.58 ID:EYcQAf3p.net] Data.Setをモナドにしたい場合はどうしてますか? GADTsを使ったものと https://wiki.cse.unsw.edu.au/cs4181/13s2/Schedule?action=AttachFile&do=get&target=thum460.pdf type familyを使ったものと https://hackage.haskell.org/package/constrained-categories-0.3.0.1/docs/Control-Monad-Constrained.html#g:1 もしくはそれ以外にも方法はあるのでしょうか
220 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 21:36:03.95 ID:4z74DpyU.net] 使う型がInt32なら32を、Int64なら64をコンパイル時に決定してソースコードに埋め込むメタプログラミングな関数を書くにはどうしますか?
221 名前:デフォルトの名無しさん mailto:sage [2017/03/16(木) 22:28:40.43 ID:4z74DpyU.net] Int に 対する read が遅くて困っています。 80万個のInt型をreadするのに、10^9付近の整数ばかりの場合と、1とか10とか小さな整数ばかりの場合とで 2 倍も処理時間が違ってきます。(2秒が4秒です!) もっと速く読み込む方法はありませんか? (但し標準入力からとします)
222 名前:デフォルトの名無しさん [2017/03/16(木) 23:18:00.86 ID:xmljzEMX.net] readInt
223 名前:デフォルトの名無しさん [2017/03/16(木) 23:20:30.52 ID:xmljzEMX.net] ByteStringのreadInt
224 名前:デフォルトの名無しさん [2017/03/16(木) 23:21:15.32 ID:xmljzEMX.net] readIntegerだった うろ覚えだったすまん
225 名前:デフォルトの名無しさん mailto:sage [2017/03/17(金) 00:45:32.34 ID:gNJfFjGV.net] melpon.org/wandbox/permlink/Uii2xmdQFxxnwLS4
226 名前:デフォルトの名無しさん mailto:sage [2017/03/17(金) 00:46:54.92 ID:gNJfFjGV.net] これは全然メタじゃない
227 名前:デフォルトの名無しさん mailto:sage [2017/03/18(土) 18:18:35.73 ID:bH58Sv6/.net] >>221 ありがとうございます。10倍速く動くようになりました
228 名前:デフォルトの名無しさん mailto:sage [2017/03/18(土) 19:37:41.00 ID:bH58Sv6/.net] ひょっとして、foldl か foldl' かよりも、そこに渡す二項関数の方を正格にするか遅延のまま かが速度に関わっているのでしょうか? ※二項関数は(+)やmaxのように単純であるとする
229 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 04:00:42.66 ID:o/zGHEH2.net] ん、何言ってんだ。二項関数の問題じゃなくて二項関数に渡す『二つの引数が今すぐどちらも値まで評価されるかどうか』が問題なのか。 される場合、foldl'の方がサンクなしの省メモリ(定数空間?)で処理が進むのか。 foldl'で正格に評価するといってもWHNFで止まるんですもんね サンクが要らないからその部分(サンクの作成と破棄)のオーバーヘッドがなくなってちょっとだけ速くなるのか。でもあくまで foldl' の利点は省メモリの方か
230 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 10:06:06.54 ID:awlj00/Y.net] https://github.com/google/codeworld code.world/ これに関する質問ってこのスレでいいの?
231 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 10:30:10.95 ID:fNC16+Hl.net] 速度の比較をしたいならまずプロファイルを取りなさい
232 名前:デフォルトの名無しさん mailto:sage [2017/03/19(日) 14:43:43.30 ID:qjqnp6Y8.net] V8エンジンで無茶苦茶速くなったことだし、もうTypeScriptでいいやと思うようになった。
233 名前:デフォルトの名無しさん [2017/03/20(月) 20:37:53.08 ID:H6ds3WUf.net] 教えてください 何らかの型の巨大データがメモリ内にあったとして、データが用済みになった時に手動で解放する方法がHaskellにありますか? そもそもそういう発想が間違いかも?
234 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 22:25:28.88 ID:THpWaU1J.net] mark&sweepいらないなと思った時に参照カウントに変更する方法 言語を変えなくてもコンパイラを変えるだけでできそう(できたとは言ってない)
235 名前:デフォルトの名無しさん mailto:sage [2017/03/20(月) 22:42:41.03 ID:tOiVLltG.net] >>231 用済みになった時に手動で解放というのが、 1) たとえどこかから参照されていようが強制的に解放する 2) 参照がなく解放できる時にスケジューリングを待たずにGCを強制する どちらの意味なのか分からん。 前者のつもりなら、たしか方法はなかったような気がする。 この発想は間違っていると思う。 自分が仕込んだメモリリークの問題を隠しているだけ。 後者なら、base パッケージの Systwm.Mem モジュールを調べてみて。 これなら分かる。 例えばゲームで、できるだけステージ途中で時間かかかるGCが起動しないように、 ステージ開始直前に強制的にGCさせたい、とか。
236 名前:デフォルトの名無しさん [2017/03/20(月) 22:58:59.79 ID:H6ds3WUf.net] >>233 ありがとう。質問してよかった。 こちらのイメージ的にはCで言うところのfreeで1)が近いと思うが、GCを強制する 発想がそもそもなかったです 断続的にでかいデータを扱うので、次のロードまでにメモリを解放しておく必要 がありまして。 Systwm.Memを調べてみます。
237 名前:デフォルトの名無しさん [2017/03/21(火) 07:16:46.72 ID:RPjo5BAn.net] 演算子の部分適用の書き方で 演算子との間にスペースを書かないのはHaskellの作法? (+ 3) (3 +) じゃなく (+3) (3+) って書くじゃんみんな
238 名前:デフォルトの名無しさん mailto:sage [2017/03/21(火) 09:36:45.55 ID:bH1u/9cj.net] みんなそうしてるから真似してそうしてるだけだろ。 わからないことは調べるのはめんどくさいから真似しておこうとか思ってそう。
239 名前:デフォルトの名無しさん mailto:sage [2017/03/21(火) 13:49:23.04 ID:L0SduR/f.net] >>235 普通に2項演算子として用いている場合は項と演算子とが独立してる感があるが、 部分適用した場合は「3を加える関数」という一塊の概念というイメージが強い なんとなくだけどそんな使い分けではないかと思ってる
240 名前:デフォルトの名無しさん mailto:sage [2017/03/21(火) 13:55:43.06 ID:TPAad80u.net] GUIには等幅ではないフォントがあるから 1ピクセル単位でスペースを描く作法とかありそう
241 名前:デフォルトの名無しさん mailto:sage [2017/03/21(火) 14:18:51.18 ID:kbUhzU5T.net] Lispの関数 1+ とかの影響でない?
242 名前:デフォルトの名無しさん mailto:sage [2017/03/21(火) 14:46:18.79 ID:LpaugWCV.net] 逆にHaskellでだけスペース挟んだりしたくないだろ
243 名前:デフォルトの名無しさん mailto:sage [2017/03/21(火) 19:57:22.30 ID:zopuGVTD.net] 人間は文章を読むのに時間がかかる筈なので、質問と同時にGCを強制発動して、ユーザが質問を理解し返答を入力するまでの間にGCを終えたい
244 名前:デフォルトの名無しさん [2017/04/02(日) 18:01:47.89 ID:HoO7tpUE.net] 「関数プログラミングの思考法」で勉強してるんですが 「たのしく学ぼう!」は楽しく理解できる内容で こちらは余計な表現は省いている硬派な文体ですね。 そのため反ってサクサク理解していけるのですが 皆さんどうでしょうか。
245 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 19:10:13.29 ID:y9d2jD+G.net] >>242 分かる。ノイズが多い本は理解を妨げる面があるよな。
246 名前:デフォルトの名無しさん mailto:sage [2017/04/02(日) 19:17:33.68 ID:W6VXUIjv.net] ノイズが多い本……land of lispかな?
247 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 17:43:18.72 ID:n+rAkf5b.net] 軽妙な喩えならいいんだがセンスない人がやると惨憺コース
248 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 18:24:45.70 ID:Qx3jr0sY.net] H本に影響を受けて書かれたE本はセンスないし痛々しいしで読むのが辛かった 変な色気出して慣れないことをしないでくれ
249 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 20:16:55.66 ID:uUmwarja.net] >>244 Land of Lisp は何故か許せる
250 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 22:01:45.88 ID:cuuaF505.net] ノイズじゃなくて冗長性だろ。 冗長性が多いほど失った記憶を復元しやすいから覚えやすいんだぞ。 そんなことも知らないのか馬鹿だなぁ。
251 名前:デフォルトの名無しさん mailto:sage [2017/04/03(月) 22:37:33.25 ID:uw3ZIsiG.net] 暗記法かな?
252 名前:デフォルトの名無しさん mailto:sage [2017/04/04(火) 01:02:45.85 ID:Zl9hd3NS.net] ラノベじゃないんだ。インクと紙の無駄遣いは止してくれ
253 名前:デフォルトの名無しさん [2017/04/07(金) 19:19:25.31 ID:sbHW0sIW.net] ラノベで気軽にHaskellを覚えられたらいいんだけどな
254 名前:デフォルトの名無しさん mailto:sage [2017/04/07(金) 20:38:50.80 ID:hQkI4asK.net] むしろHaskelでラノベ全文を書いたらいいんだけどな
255 名前:デフォルトの名無しさん mailto:sage [2017/04/07(金) 20:56:28.47 ID:lfhJbqMl.net] >>251 「Haskellを覚える」の意味が分からん Haskellの何が覚えられないんだ? 文法一覧表とか入門書をいちいち見ないとコーディングできないとか? それなら、たとえラノベに分かり易く書かれていようと、読むだけじゃ憶えられんぞ
256 名前:デフォルトの名無しさん mailto:sage [2017/04/07(金) 21:28:25.18 ID:TruQxjxN.net] 英語で遠回りして結局覚えられない奴