関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
http://www.haskell.org/
前スレ
関数型プログラミング言語Haskell Part28
http://echo.2ch.net/test/read.cgi/tech/1428597032/
関数型プログラミング言語Haskell Part30 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/01/15(日) 23:43:54.28ID:Vh4eztBk
168デフォルトの名無しさん
2017/02/19(日) 20:52:17.90ID:TYcfVj75 xss = (1 : repeat 0) : [ zipWith (+) (0 : xs) xs | xs <- xss ]
pascal = [ takeWhile (/=0) xs | xs <- xss ]
これは2変数というか2重ループ
それと再帰のために自分自身に名前をつけた時点でポイントフリーは諦めている筈
pascal = [ takeWhile (/=0) xs | xs <- xss ]
これは2変数というか2重ループ
それと再帰のために自分自身に名前をつけた時点でポイントフリーは諦めている筈
169デフォルトの名無しさん
2017/02/19(日) 23:43:55.15ID:rxEXn9HF ポイントフリーって何?こういうこと?
pascal = map (takeWhile (/= 0)) $ iterate ((1 :) . map sum . transpose . take 2 . tails) (1 : repeat 0)
http://melpon.org/wandbox/permlink/bYSi5tfNVy5zfzPg
pascal = map (takeWhile (/= 0)) $ iterate ((1 :) . map sum . transpose . take 2 . tails) (1 : repeat 0)
http://melpon.org/wandbox/permlink/bYSi5tfNVy5zfzPg
170デフォルトの名無しさん
2017/02/20(月) 00:18:45.73ID:mtupkOQi 変数名かんがえたくないときポイフリできたらしちゃうことある
171デフォルトの名無しさん
2017/02/20(月) 00:20:11.39ID:bFWxmJHr172デフォルトの名無しさん
2017/02/20(月) 20:56:54.49ID:uIdMc98M ArrowLoopがどういうインターフェイスなのかいまいちよく分からないけど
その定義でどう動くかはfによるとしか・・・
その定義でどう動くかはfによるとしか・・・
173デフォルトの名無しさん
2017/02/20(月) 22:57:03.60ID:tib6qfwe 結局ハードウェアの動きとあまりに乖離しすぎてるってのが
普及しない理由じゃないかと。
普及しない理由じゃないかと。
174デフォルトの名無しさん
2017/02/21(火) 04:45:41.06ID:bkUsfADx 量子コンピュータが普及する時は言語どうなるんかな
CPUに合わせた新しい言語になるのか、今の言語をベースにコンパイラに任せるのか
原理とか全く知らなくて言ってるけど
CPUに合わせた新しい言語になるのか、今の言語をベースにコンパイラに任せるのか
原理とか全く知らなくて言ってるけど
175デフォルトの名無しさん
2017/02/21(火) 11:55:34.70ID:hz5m2IGZ メモリとCPUが分離しすぎているおかげでメモリ上のデータ構造に変化がない
OOPははそこを変えようとしたのか
分離するのやめれば破壊的イノベーションが起きるのではと
OOPははそこを変えようとしたのか
分離するのやめれば破壊的イノベーションが起きるのではと
176デフォルトの名無しさん
2017/02/21(火) 19:46:11.18ID:CLRDv6M0 ほんとぉ?
177デフォルトの名無しさん
2017/02/21(火) 22:11:08.30ID:3rYbm5Zu golangはOOPとは違うような
178デフォルトの名無しさん
2017/02/22(水) 01:32:49.98ID:doFig/5A179デフォルトの名無しさん
2017/02/22(水) 11:25:20.39ID:C8G0Nbdq 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
問題の本質を以下の単純化したコードで例示します
最後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
180デフォルトの名無しさん
2017/02/23(木) 00:49:33.52ID:9wlFqT9C 諦メロン
181デフォルトの名無しさん
2017/02/23(木) 06:24:32.19ID:1D9YdnQF >>178
最近はRustに御執心の様子
最近はRustに御執心の様子
182デフォルトの名無しさん
2017/02/24(金) 02:19:21.58ID:bZ+UJBqj >>179
OldAとUsefulFooとNewAの設計方針が間違っていたのでは?
OldAとUsefulFooとNewAの設計方針が間違っていたのでは?
183デフォルトの名無しさん
2017/02/24(金) 11:52:40.03ID:e/BP7pNw 最新のGHCは簡単な余再帰が末尾再帰に変換されて最適化かかるの?
184デフォルトの名無しさん
2017/02/25(土) 01:04:24.08ID:wcM+rtIC185デフォルトの名無しさん
2017/02/25(土) 06:14:09.47ID:rUogqkUr これがアスペか
186デフォルトの名無しさん
2017/02/25(土) 06:24:01.20ID:E4CT8R9/ 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のフィボナッチとか完全に霞んで見える。
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のフィボナッチとか完全に霞んで見える。
187デフォルトの名無しさん
2017/02/25(土) 11:33:38.62ID:J8MTJSeU 数式に近いから美しいって言ってるのかもしれないけど
それは
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)だけどな
それは
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)だけどな
188デフォルトの名無しさん
2017/02/25(土) 12:20:37.16ID:5RveVCtH こんな所で感動しちゃってどうするの
そういうのは万策尽きて神頼みするような時だけいい
数学に感情は不要
そういうのは万策尽きて神頼みするような時だけいい
数学に感情は不要
189デフォルトの名無しさん
2017/02/25(土) 18:51:36.03ID:A0aZ5Z9S 初歩的なメモ化で感動できた頃の心の輝きは大切にしていきたい
190デフォルトの名無しさん
2017/02/25(土) 18:58:12.64ID:A0aZ5Z9S メモ化してトップダウンするより足していってボトムアップの要領の良さが勝つ回
191デフォルトの名無しさん
2017/02/26(日) 22:44:13.60ID:+sRU0DuI stack new して作ったプロジェクトでライブラリを作りました。
(cabal ファイルに executable の代わりに library の項目を書いた)
stack build して正しくビルドされたことを確認してから stack install しました。
この後、別の stack new したプロジェクトで、先程 stack install したライブラリを使用するには、
どうすればよいのでしょうか。
(cabal ファイルに executable の代わりに library の項目を書いた)
stack build して正しくビルドされたことを確認してから stack install しました。
この後、別の stack new したプロジェクトで、先程 stack install したライブラリを使用するには、
どうすればよいのでしょうか。
192デフォルトの名無しさん
2017/02/27(月) 10:48:09.56ID:TbO8J9W/ stack.yamlのpackagesから設定できるよ、stack installはしなくて良い https://docs.haskellstack.org/en/stable/yaml_configuration/
193デフォルトの名無しさん
2017/02/27(月) 22:42:50.07ID:6zX/SjR0194デフォルトの名無しさん
2017/03/01(水) 13:33:54.14ID:5kGyNHm4 諸君、議論したまえ
195デフォルトの名無しさん
2017/03/02(木) 08:35:24.25ID:jHvj97KG196デフォルトの名無しさん
2017/03/06(月) 19:44:44.66ID:BYkqMHF2 新しく出たHaskell本の感想クレクレ
197デフォルトの名無しさん
2017/03/06(月) 20:21:59.21ID:j+wBUtqM 前書きだけ立ち読みしたけど
あれ関数プログラミング入門を書き直したものなんだな
あれ関数プログラミング入門を書き直したものなんだな
198デフォルトの名無しさん
2017/03/06(月) 20:28:33.59ID:MHxEW6Wj 古い方持ってたら不要なのね
199デフォルトの名無しさん
2017/03/06(月) 23:01:20.41ID:WL27y1mu マジかよ危うく買うところだった
200デフォルトの名無しさん
2017/03/07(火) 00:14:37.81ID:+xePePxn かなり書き直してるよ
201デフォルトの名無しさん
2017/03/07(火) 10:44:02.94ID:mr++RUpk Bird氏の本の第三版か。
あの人、Functional Programmingの大御所なんだね。
すごいHやGraham氏、その他日本人著者の書いたのをいろいろ読んだけど、
コアな部分を理解するならBird氏の本だと思った。
翻訳第二版のファンシーな表紙をやめて、
原著の表紙の虎を持ってきたのは何かあったのだろうか?ww
あの人、Functional Programmingの大御所なんだね。
すごいHやGraham氏、その他日本人著者の書いたのをいろいろ読んだけど、
コアな部分を理解するならBird氏の本だと思った。
翻訳第二版のファンシーな表紙をやめて、
原著の表紙の虎を持ってきたのは何かあったのだろうか?ww
202デフォルトの名無しさん
2017/03/07(火) 13:07:01.84ID:H+HmLSCA >>201
コアと言うのは、例えばどんな部分?
コアと言うのは、例えばどんな部分?
203デフォルトの名無しさん
2017/03/07(火) 13:38:15.87ID:fYd9KAIw と思ったらそもそも関数プログラミング入門買ってなかったのでこれを機会に買おう
204デフォルトの名無しさん
2017/03/07(火) 17:44:15.63ID:rdG5C9r5 kinkyな表紙にしてくれ
205デフォルトの名無しさん
2017/03/07(火) 17:49:10.46ID:mr++RUpk >202
最初から正格、非正格を念頭に置いた上で議論が進んでいく。その時点で既に毛色が違う。
豆知識として、リスト内包表記とdo構文の<-の関係も載ってた。
証明問題が多く、数学がわかんないときつい感じ。
最初から正格、非正格を念頭に置いた上で議論が進んでいく。その時点で既に毛色が違う。
豆知識として、リスト内包表記とdo構文の<-の関係も載ってた。
証明問題が多く、数学がわかんないときつい感じ。
206デフォルトの名無しさん
2017/03/07(火) 20:23:58.44ID:36OrCepo207デフォルトの名無しさん
2017/03/08(水) 06:06:40.10ID:XWjfITmE208デフォルトの名無しさん
2017/03/08(水) 06:44:38.74ID:KZ+JXzQR 今更すぎる
和訳で知ったのに原文貼って物知り顔するな
和訳で知ったのに原文貼って物知り顔するな
209デフォルトの名無しさん
2017/03/08(水) 12:31:57.39ID:RBmx3E25 >>207
週末に人気のあるプログラミング言語(StackOverflow調べ)
https://developers.srad.jp/story/17/02/09/0354232/
週末にいちばん多く使われるプログラミング言語は?
http://postd.cc/what-programming-languages-weekends/
週末に人気のあるプログラミング言語(StackOverflow調べ)
https://developers.srad.jp/story/17/02/09/0354232/
週末にいちばん多く使われるプログラミング言語は?
http://postd.cc/what-programming-languages-weekends/
210デフォルトの名無しさん
2017/03/11(土) 21:23:14.84ID:uo9d8gfu Haskellにも依存型があと数年以内に組み込まれるらしいですが、使用目的は専ら型安全性を得るためなのでしょうか?
211デフォルトの名無しさん
2017/03/11(土) 23:30:29.33ID:UHyrmxcZ 定理証明支援系はいつですか?
212resumi
2017/03/12(日) 01:08:56.73ID:f0Kjw9v5213デフォルトの名無しさん
2017/03/12(日) 01:54:17.97ID:kqHBJY7y 見てないけどグロ
214デフォルトの名無しさん
2017/03/12(日) 22:59:29.77ID:fpOKmvSG 最新のGHCだと余再帰が可能な限り自動で末尾再帰に変換されて最適化がかかるって聞いたんですけど本当すか?
215デフォルトの名無しさん
2017/03/13(月) 08:05:36.75ID:0mFH2buk tanakhに訊け
216デフォルトの名無しさん
2017/03/13(月) 10:55:02.44ID:dlgNAjv1 tanakhとかうざ
217デフォルトの名無しさん
2017/03/14(火) 22:01:52.58ID:EYcQAf3p 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
もしくはそれ以外にも方法はあるのでしょうか
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
もしくはそれ以外にも方法はあるのでしょうか
218デフォルトの名無しさん
2017/03/16(木) 21:36:03.95ID:4z74DpyU 使う型がInt32なら32を、Int64なら64をコンパイル時に決定してソースコードに埋め込むメタプログラミングな関数を書くにはどうしますか?
219デフォルトの名無しさん
2017/03/16(木) 22:28:40.43ID:4z74DpyU Int に 対する read が遅くて困っています。
80万個のInt型をreadするのに、10^9付近の整数ばかりの場合と、1とか10とか小さな整数ばかりの場合とで 2 倍も処理時間が違ってきます。(2秒が4秒です!)
もっと速く読み込む方法はありませんか?
(但し標準入力からとします)
80万個のInt型をreadするのに、10^9付近の整数ばかりの場合と、1とか10とか小さな整数ばかりの場合とで 2 倍も処理時間が違ってきます。(2秒が4秒です!)
もっと速く読み込む方法はありませんか?
(但し標準入力からとします)
220デフォルトの名無しさん
2017/03/16(木) 23:18:00.86ID:xmljzEMX readInt
221デフォルトの名無しさん
2017/03/16(木) 23:20:30.52ID:xmljzEMX ByteStringのreadInt
222デフォルトの名無しさん
2017/03/16(木) 23:21:15.32ID:xmljzEMX readIntegerだった
うろ覚えだったすまん
うろ覚えだったすまん
223デフォルトの名無しさん
2017/03/17(金) 00:45:32.34ID:gNJfFjGV224デフォルトの名無しさん
2017/03/17(金) 00:46:54.92ID:gNJfFjGV これは全然メタじゃない
225デフォルトの名無しさん
2017/03/18(土) 18:18:35.73ID:bH58Sv6/ >>221
ありがとうございます。10倍速く動くようになりました
ありがとうございます。10倍速く動くようになりました
226デフォルトの名無しさん
2017/03/18(土) 19:37:41.00ID:bH58Sv6/ ひょっとして、foldl か foldl' かよりも、そこに渡す二項関数の方を正格にするか遅延のまま
かが速度に関わっているのでしょうか?
※二項関数は(+)やmaxのように単純であるとする
かが速度に関わっているのでしょうか?
※二項関数は(+)やmaxのように単純であるとする
227デフォルトの名無しさん
2017/03/19(日) 04:00:42.66ID:o/zGHEH2 ん、何言ってんだ。二項関数の問題じゃなくて二項関数に渡す『二つの引数が今すぐどちらも値まで評価されるかどうか』が問題なのか。
される場合、foldl'の方がサンクなしの省メモリ(定数空間?)で処理が進むのか。
foldl'で正格に評価するといってもWHNFで止まるんですもんね
サンクが要らないからその部分(サンクの作成と破棄)のオーバーヘッドがなくなってちょっとだけ速くなるのか。でもあくまで foldl' の利点は省メモリの方か
される場合、foldl'の方がサンクなしの省メモリ(定数空間?)で処理が進むのか。
foldl'で正格に評価するといってもWHNFで止まるんですもんね
サンクが要らないからその部分(サンクの作成と破棄)のオーバーヘッドがなくなってちょっとだけ速くなるのか。でもあくまで foldl' の利点は省メモリの方か
228デフォルトの名無しさん
2017/03/19(日) 10:06:06.54ID:awlj00/Y229デフォルトの名無しさん
2017/03/19(日) 10:30:10.95ID:fNC16+Hl 速度の比較をしたいならまずプロファイルを取りなさい
230デフォルトの名無しさん
2017/03/19(日) 14:43:43.30ID:qjqnp6Y8 V8エンジンで無茶苦茶速くなったことだし、もうTypeScriptでいいやと思うようになった。
231デフォルトの名無しさん
2017/03/20(月) 20:37:53.08ID:H6ds3WUf 教えてください
何らかの型の巨大データがメモリ内にあったとして、データが用済みになった時に手動で解放する方法がHaskellにありますか?
そもそもそういう発想が間違いかも?
何らかの型の巨大データがメモリ内にあったとして、データが用済みになった時に手動で解放する方法がHaskellにありますか?
そもそもそういう発想が間違いかも?
232デフォルトの名無しさん
2017/03/20(月) 22:25:28.88ID:THpWaU1J mark&sweepいらないなと思った時に参照カウントに変更する方法
言語を変えなくてもコンパイラを変えるだけでできそう(できたとは言ってない)
言語を変えなくてもコンパイラを変えるだけでできそう(できたとは言ってない)
233デフォルトの名無しさん
2017/03/20(月) 22:42:41.03ID:tOiVLltG >>231
用済みになった時に手動で解放というのが、
1) たとえどこかから参照されていようが強制的に解放する
2) 参照がなく解放できる時にスケジューリングを待たずにGCを強制する
どちらの意味なのか分からん。
前者のつもりなら、たしか方法はなかったような気がする。
この発想は間違っていると思う。
自分が仕込んだメモリリークの問題を隠しているだけ。
後者なら、base パッケージの Systwm.Mem モジュールを調べてみて。
これなら分かる。
例えばゲームで、できるだけステージ途中で時間かかかるGCが起動しないように、
ステージ開始直前に強制的にGCさせたい、とか。
用済みになった時に手動で解放というのが、
1) たとえどこかから参照されていようが強制的に解放する
2) 参照がなく解放できる時にスケジューリングを待たずにGCを強制する
どちらの意味なのか分からん。
前者のつもりなら、たしか方法はなかったような気がする。
この発想は間違っていると思う。
自分が仕込んだメモリリークの問題を隠しているだけ。
後者なら、base パッケージの Systwm.Mem モジュールを調べてみて。
これなら分かる。
例えばゲームで、できるだけステージ途中で時間かかかるGCが起動しないように、
ステージ開始直前に強制的にGCさせたい、とか。
234デフォルトの名無しさん
2017/03/20(月) 22:58:59.79ID:H6ds3WUf >>233
ありがとう。質問してよかった。
こちらのイメージ的にはCで言うところのfreeで1)が近いと思うが、GCを強制する
発想がそもそもなかったです
断続的にでかいデータを扱うので、次のロードまでにメモリを解放しておく必要
がありまして。
Systwm.Memを調べてみます。
ありがとう。質問してよかった。
こちらのイメージ的にはCで言うところのfreeで1)が近いと思うが、GCを強制する
発想がそもそもなかったです
断続的にでかいデータを扱うので、次のロードまでにメモリを解放しておく必要
がありまして。
Systwm.Memを調べてみます。
235デフォルトの名無しさん
2017/03/21(火) 07:16:46.72ID:RPjo5BAn 演算子の部分適用の書き方で
演算子との間にスペースを書かないのはHaskellの作法?
(+ 3) (3 +) じゃなく (+3) (3+) って書くじゃんみんな
演算子との間にスペースを書かないのはHaskellの作法?
(+ 3) (3 +) じゃなく (+3) (3+) って書くじゃんみんな
236デフォルトの名無しさん
2017/03/21(火) 09:36:45.55ID:bH1u/9cj みんなそうしてるから真似してそうしてるだけだろ。
わからないことは調べるのはめんどくさいから真似しておこうとか思ってそう。
わからないことは調べるのはめんどくさいから真似しておこうとか思ってそう。
237デフォルトの名無しさん
2017/03/21(火) 13:49:23.04ID:L0SduR/f >>235
普通に2項演算子として用いている場合は項と演算子とが独立してる感があるが、
部分適用した場合は「3を加える関数」という一塊の概念というイメージが強い
なんとなくだけどそんな使い分けではないかと思ってる
普通に2項演算子として用いている場合は項と演算子とが独立してる感があるが、
部分適用した場合は「3を加える関数」という一塊の概念というイメージが強い
なんとなくだけどそんな使い分けではないかと思ってる
238デフォルトの名無しさん
2017/03/21(火) 13:55:43.06ID:TPAad80u GUIには等幅ではないフォントがあるから
1ピクセル単位でスペースを描く作法とかありそう
1ピクセル単位でスペースを描く作法とかありそう
239デフォルトの名無しさん
2017/03/21(火) 14:18:51.18ID:kbUhzU5T Lispの関数 1+ とかの影響でない?
240デフォルトの名無しさん
2017/03/21(火) 14:46:18.79ID:LpaugWCV 逆にHaskellでだけスペース挟んだりしたくないだろ
241デフォルトの名無しさん
2017/03/21(火) 19:57:22.30ID:zopuGVTD 人間は文章を読むのに時間がかかる筈なので、質問と同時にGCを強制発動して、ユーザが質問を理解し返答を入力するまでの間にGCを終えたい
242デフォルトの名無しさん
2017/04/02(日) 18:01:47.89ID:HoO7tpUE 「関数プログラミングの思考法」で勉強してるんですが
「たのしく学ぼう!」は楽しく理解できる内容で
こちらは余計な表現は省いている硬派な文体ですね。
そのため反ってサクサク理解していけるのですが
皆さんどうでしょうか。
「たのしく学ぼう!」は楽しく理解できる内容で
こちらは余計な表現は省いている硬派な文体ですね。
そのため反ってサクサク理解していけるのですが
皆さんどうでしょうか。
243デフォルトの名無しさん
2017/04/02(日) 19:10:13.29ID:y9d2jD+G >>242
分かる。ノイズが多い本は理解を妨げる面があるよな。
分かる。ノイズが多い本は理解を妨げる面があるよな。
244デフォルトの名無しさん
2017/04/02(日) 19:17:33.68ID:W6VXUIjv ノイズが多い本……land of lispかな?
245デフォルトの名無しさん
2017/04/03(月) 17:43:18.72ID:n+rAkf5b 軽妙な喩えならいいんだがセンスない人がやると惨憺コース
246デフォルトの名無しさん
2017/04/03(月) 18:24:45.70ID:Qx3jr0sY H本に影響を受けて書かれたE本はセンスないし痛々しいしで読むのが辛かった
変な色気出して慣れないことをしないでくれ
変な色気出して慣れないことをしないでくれ
247デフォルトの名無しさん
2017/04/03(月) 20:16:55.66ID:uUmwarja >>244
Land of Lisp は何故か許せる
Land of Lisp は何故か許せる
248デフォルトの名無しさん
2017/04/03(月) 22:01:45.88ID:cuuaF505 ノイズじゃなくて冗長性だろ。
冗長性が多いほど失った記憶を復元しやすいから覚えやすいんだぞ。
そんなことも知らないのか馬鹿だなぁ。
冗長性が多いほど失った記憶を復元しやすいから覚えやすいんだぞ。
そんなことも知らないのか馬鹿だなぁ。
249デフォルトの名無しさん
2017/04/03(月) 22:37:33.25ID:uw3ZIsiG 暗記法かな?
250デフォルトの名無しさん
2017/04/04(火) 01:02:45.85ID:Zl9hd3NS ラノベじゃないんだ。インクと紙の無駄遣いは止してくれ
251デフォルトの名無しさん
2017/04/07(金) 19:19:25.31ID:sbHW0sIW ラノベで気軽にHaskellを覚えられたらいいんだけどな
252デフォルトの名無しさん
2017/04/07(金) 20:38:50.80ID:hQkI4asK むしろHaskelでラノベ全文を書いたらいいんだけどな
253デフォルトの名無しさん
2017/04/07(金) 20:56:28.47ID:lfhJbqMl >>251
「Haskellを覚える」の意味が分からん
Haskellの何が覚えられないんだ?
文法一覧表とか入門書をいちいち見ないとコーディングできないとか?
それなら、たとえラノベに分かり易く書かれていようと、読むだけじゃ憶えられんぞ
「Haskellを覚える」の意味が分からん
Haskellの何が覚えられないんだ?
文法一覧表とか入門書をいちいち見ないとコーディングできないとか?
それなら、たとえラノベに分かり易く書かれていようと、読むだけじゃ憶えられんぞ
254デフォルトの名無しさん
2017/04/07(金) 21:28:25.18ID:TruQxjxN 英語で遠回りして結局覚えられない奴
255デフォルトの名無しさん
2017/04/07(金) 21:40:36.27ID:aTgPduXz Haskellをというか、ライブラリの便利な使い方を覚えるってことかな
ライブラリの型シグネチャとチョロチョロっとした英語の説明読んで、想像力働かせて『これは今までの処理がこうこう、こういう書き方でできるようになって便利ですね』と理解するのが難しい
<* や *> のパーサーでの使い方(認識だけして捨てる)を知った時はアハ体験だった
こういうのをドキュメント読んだだけで気付くということができない
ライブラリの型シグネチャとチョロチョロっとした英語の説明読んで、想像力働かせて『これは今までの処理がこうこう、こういう書き方でできるようになって便利ですね』と理解するのが難しい
<* や *> のパーサーでの使い方(認識だけして捨てる)を知った時はアハ体験だった
こういうのをドキュメント読んだだけで気付くということができない
256デフォルトの名無しさん
2017/04/07(金) 21:44:12.76ID:aTgPduXz 基礎ライブラリは抽象的なので、そこから応用的具象化を想像する能力が足りない
初めてApplicativeのドキュメントを読んでその有用性に気付く奴はIQ高過ぎだろ
頭がpureだった俺は戦意喪失したものだよ
初めてApplicativeのドキュメントを読んでその有用性に気付く奴はIQ高過ぎだろ
頭がpureだった俺は戦意喪失したものだよ
257デフォルトの名無しさん
2017/04/07(金) 21:57:17.10ID:oAg/9XNg 誰かHaskellで萌える関数型プログラミング入門書いてくれ。
258デフォルトの名無しさん
2017/04/07(金) 22:45:53.56ID:961Byv/H259デフォルトの名無しさん
2017/04/07(金) 23:09:24.70ID:lfhJbqMl >>255
ライブラリドキュメントを眺めていて、どんな使い方ができるんだろと想像するのは、そりゃ難しいよ。
それはドキュメントの使い方を間違っていると思う。
俺はアプリケーションを作っている時、
1. こういう引数からこういう結果になる関数が欲しい
2. 1の計算を分解すると A、B、C という計算の組み合わせになりそうだ
3. A、B、C を計算する関数をすでに誰か作っていないだろうか?
という順に考えて、A、B、C をドキュメントから探す、という使い方をしてる。
*> の例なら、誰かがパーサーで認識だけして捨てるのに使っているのを見てアハ体験をするのではない。
そうじゃなくて、初めにパーサーを作っていて認識だけして捨てたいという欲求が湧いてきて、
じゃあどうするかと考えた時に、まず「認識だけして捨てる」とはどういう計算なのかを分析する。
そうして事の本質を捉えてからドキュメントから求めるものを探す。
その時、たまたま既にパーサーの構造を Applicative で表現していれば、
ドキュメントの Control.Applicative モジュールの項を真っ先に探して *> を見つけるだろうし、
別の方法で実装していれば、実現する関数はライブラリには無さそうだなと諦めて自作するかも知れない。
何れにしてもアハ体験の出番はない。
言っておくが、アハ体験が悪いわけではないぞ。
他人の解説やソースコードを見て、そういう使い方もできるのかと学ぶ事は大事だ。
ただ、ドキュメントをそのように使うのは違うだろ、つまり(ライブラリ)ドキュメントは
解説書でも読み物でもないだろ、と言いたいんだ。
ライブラリドキュメントを眺めていて、どんな使い方ができるんだろと想像するのは、そりゃ難しいよ。
それはドキュメントの使い方を間違っていると思う。
俺はアプリケーションを作っている時、
1. こういう引数からこういう結果になる関数が欲しい
2. 1の計算を分解すると A、B、C という計算の組み合わせになりそうだ
3. A、B、C を計算する関数をすでに誰か作っていないだろうか?
という順に考えて、A、B、C をドキュメントから探す、という使い方をしてる。
*> の例なら、誰かがパーサーで認識だけして捨てるのに使っているのを見てアハ体験をするのではない。
そうじゃなくて、初めにパーサーを作っていて認識だけして捨てたいという欲求が湧いてきて、
じゃあどうするかと考えた時に、まず「認識だけして捨てる」とはどういう計算なのかを分析する。
そうして事の本質を捉えてからドキュメントから求めるものを探す。
その時、たまたま既にパーサーの構造を Applicative で表現していれば、
ドキュメントの Control.Applicative モジュールの項を真っ先に探して *> を見つけるだろうし、
別の方法で実装していれば、実現する関数はライブラリには無さそうだなと諦めて自作するかも知れない。
何れにしてもアハ体験の出番はない。
言っておくが、アハ体験が悪いわけではないぞ。
他人の解説やソースコードを見て、そういう使い方もできるのかと学ぶ事は大事だ。
ただ、ドキュメントをそのように使うのは違うだろ、つまり(ライブラリ)ドキュメントは
解説書でも読み物でもないだろ、と言いたいんだ。
260デフォルトの名無しさん
2017/04/07(金) 23:36:42.37ID:+bl73oc8 本来であれば入門編は有用性ではなく単相型の欠陥に気付かせるべきなんだよ
VectorInt型とかVectorChar型とか再発明を繰り返すループに気付け
その後でパラメータ多相編とアドホック多相編をやるべき
VectorInt型とかVectorChar型とか再発明を繰り返すループに気付け
その後でパラメータ多相編とアドホック多相編をやるべき
261デフォルトの名無しさん
2017/04/08(土) 01:14:10.72ID:7QsPN9bB >>258
買う買う。
買う買う。
262デフォルトの名無しさん
2017/04/08(土) 20:59:41.01ID:gcfXcmks >>258
かうぞー!
かうぞー!
263デフォルトの名無しさん
2017/04/09(日) 00:41:02.14ID:jUVd4dkj 萌は興味を引かせる手段にはなれても、理解を深める手段にはなれんよ
264デフォルトの名無しさん
2017/04/09(日) 01:31:48.04ID:cVuKvPJL Kindleで、標準ライブラリの一つにつき一冊かけて特集した本を電子書籍で出して
抽象的な基礎ライブラリはその応用可能性をねっとりと絡み付くまでに例示して
抽象的な基礎ライブラリはその応用可能性をねっとりと絡み付くまでに例示して
265デフォルトの名無しさん
2017/04/09(日) 01:36:18.18ID:xs3hgIsU いいっすね読んでみたい
GitBookあたりで無料で
GitBookあたりで無料で
266デフォルトの名無しさん
2017/04/09(日) 06:15:21.14ID:bWQLB/aV HaskellはHOW TO本が少な過ぎる
写経するだけでサクッと実用アプリを作れるような本が欲しいよね
IOが七章や八章から登場する入門書とか
Haskellを普及させる気ねぇだろw
写経するだけでサクッと実用アプリを作れるような本が欲しいよね
IOが七章や八章から登場する入門書とか
Haskellを普及させる気ねぇだろw
267デフォルトの名無しさん
2017/04/09(日) 11:16:11.13ID:6mlbYxYb >>266
他言語でもそんな本は無いんじゃないか?
「サクッと」と「実用」がどんなレベルか知らんけど。
一応 Beginning Haskell が Web 系で実用的で、
入門者がアプリケーションを作るまでを指導してくれるが、洋書だ。
他言語でもそんな本は無いんじゃないか?
「サクッと」と「実用」がどんなレベルか知らんけど。
一応 Beginning Haskell が Web 系で実用的で、
入門者がアプリケーションを作るまでを指導してくれるが、洋書だ。
268デフォルトの名無しさん
2017/04/09(日) 13:25:40.09ID:k7pBYoHG Pythonなんかは
サンプルコードを書き書きしてるだけで
機械学習が出来ちゃう本なんかが出てるね
サンプルコードを書き書きしてるだけで
機械学習が出来ちゃう本なんかが出てるね
■ このスレッドは過去ログ倉庫に格納されています
