[過去ログ]
関数型プログラミング言語Haskell Part16 (978レス)
関数型プログラミング言語Haskell Part16 http://echo.5ch.net/test/read.cgi/tech/1317958045/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
441: デフォルトの名無しさん [sage] 2011/11/10(木) 17:18:49.29 確かに(a^2)と書いただけで(2::Integer)と推論されて 重いIntegerの(^)が呼ばれるのは嫌なことがある(aはDoubleとして) http://echo.5ch.net/test/read.cgi/tech/1317958045/441
442: デフォルトの名無しさん [sage] 2011/11/10(木) 17:40:52.38 先に型を書くというのはそういうのを防ぐためにも役に立つのかな http://echo.5ch.net/test/read.cgi/tech/1317958045/442
443: デフォルトの名無しさん [sage] 2011/11/10(木) 17:48:18.08 はい 役に立ちます http://echo.5ch.net/test/read.cgi/tech/1317958045/443
444: デフォルトの名無しさん [sage] 2011/11/10(木) 18:08:46.39 いや役に立たんだろ コードを書いてない段階でどうやって(a^2)の2に型を指定するんだ http://echo.5ch.net/test/read.cgi/tech/1317958045/444
445: デフォルトの名無しさん [sage] 2011/11/10(木) 18:27:39.40 >>444 え、どう言う型を受け取って、どう言う型を返したいか、を考えて指定すれば良いだけだよ? http://echo.5ch.net/test/read.cgi/tech/1317958045/445
446: デフォルトの名無しさん [sage] 2011/11/10(木) 19:47:03.85 >>418 Yampa 関連のドキュメントは論文も含めてけっこう多いので、 どれがオリジナルなのかもさっぱりなんですが、 どれも個々の特徴を割り下げてたり、活用したり、 さもなければ全体を長々と解説してる感じのものばかり もっと、全体の構造をスパッと語ってくれると、 それだけでもありがたいのですが、無いですね reactive も勉強してみたんです シンクの仕組みがなかなか独特で面白かったんですけど、 結局これは「今はまだ」使えんと思いました 挙動が予測と噛み合わない部分や、予測し難い部分がちょくちょくあるんですよね 例えば integral 関数を使ってると、タイムリークを起こすと言うのかな、 間に合わなかった計算処理がどんどん積み上がっていって次第に処理が遅くなりました この辺り Yampa なら react 関数を呼ぶ(呼ばれる)タイミングを そのタイミングの処理の重さに合わせてリアルタイムに調整することは楽にできるんですが、 reactive ではその辺りどうやればいいのかよく分からない http://echo.5ch.net/test/read.cgi/tech/1317958045/446
447: デフォルトの名無しさん [sage] 2011/11/10(木) 19:53:02.29 >>445 (^) :: (Num a, Integral b) => a -> b -> a だから、(a^2)の2の型が何になっても、式全体の型には関わってこない http://echo.5ch.net/test/read.cgi/tech/1317958045/447
448: デフォルトの名無しさん [sage] 2011/11/10(木) 20:31:23.29 >>447 こうすりゃいいじゃん (^(2::Int)) http://echo.5ch.net/test/read.cgi/tech/1317958045/448
449: デフォルトの名無しさん [sage] 2011/11/10(木) 21:08:18.64 >>448 それ>>442の話と関係なくね? http://echo.5ch.net/test/read.cgi/tech/1317958045/449
450: デフォルトの名無しさん [sage] 2011/11/10(木) 21:24:40.76 >>449 自作の関数作るときとかは、型推論に任せるより自分で決めた方が速かったり、逆に遅い代わりに大きな数を扱えたりする length関数と同じ機能の関数mylength作るとき、 mylength [] = 0 mylength (_:ns) = 1 + mylength ns の型は[a]->aだが、 mylength::[a]->Int mylength [] = 0 mylength (_:ns) = 1 + mylength ns とすれば、当然ながら型は[a]->Intになる http://echo.5ch.net/test/read.cgi/tech/1317958045/450
451: デフォルトの名無しさん [sage] 2011/11/10(木) 21:26:17.73 訂正 x [a]->a o [t]->a http://echo.5ch.net/test/read.cgi/tech/1317958045/451
452: デフォルトの名無しさん [sage] 2011/11/10(木) 22:01:08.03 >>450 だからそれは(a^2)のケースでは関係ないよね http://echo.5ch.net/test/read.cgi/tech/1317958045/452
453: デフォルトの名無しさん [sage] 2011/11/10(木) 22:06:04.65 >>452 自分で作る関数なら自分で型を決めればいいし、すでにある関数なら、引数に渡す値の方の型を決める他あるまい http://echo.5ch.net/test/read.cgi/tech/1317958045/453
454: デフォルトの名無しさん [sage] 2011/11/10(木) 22:16:47.46 >>453 大抵の場合は、自分で作る関数の型さえ決めれば型推論で自動的に全ての型が決まるんだよ それだけで決まらないこともときどきあって、(^)はそれを発生させる例の筆頭 http://echo.5ch.net/test/read.cgi/tech/1317958045/454
455: デフォルトの名無しさん [sage] 2011/11/10(木) 22:33:42.23 >>454 そういう話だっけ? 速い型を使いたいけど、型を明示した方が良いのか?って話だった気が・・・ 単なる数字(例えば5とか)は、通常Num a。定数として宣言すると、Integralにデフォルトでなるから、数字をInt型にしたいなら、5::Intって具合に宣言しないとダメ >>441への回答としては(^(2::Int))と書け。が、妥当だと思うんだが・・・ *Main> :t 5 5 :: Num a => a *Main> let a = 5 *Main> :t a a :: Integer *Main> :t 5::Int 5::Int :: Int http://echo.5ch.net/test/read.cgi/tech/1317958045/455
456: デフォルトの名無しさん [sage] 2011/11/10(木) 22:48:37.04 >>441は何も質問してないのに回答とかよくわからん 俺は>>442に対する>>443の回答に反論してるだけだよ http://echo.5ch.net/test/read.cgi/tech/1317958045/456
457: デフォルトの名無しさん [sage] 2011/11/10(木) 23:17:35.61 >>456 ん、んんん? だったら、>>450の通り、先に型を書けば防げてるだろ? (^(2::Int))は併用すればいい話じゃね? ごちゃ混ぜに話すなよ http://echo.5ch.net/test/read.cgi/tech/1317958045/457
458: デフォルトの名無しさん [sage] 2011/11/10(木) 23:20:16.10 何が防げてるの? http://echo.5ch.net/test/read.cgi/tech/1317958045/458
459: デフォルトの名無しさん [sage] 2011/11/10(木) 23:32:16.57 >>458 遅いIntegerやNum aを使うのを防げてるだろ だあ、もう beki1 a = a ^ 2 beki2 :: Int -> Int beki2 a = a ^ 2 beki3::Int -> Int beki3 a = a ^ 2::Int 下に行くほど、遅い型を使うの防げてる 以上 http://echo.5ch.net/test/read.cgi/tech/1317958045/459
460: デフォルトの名無しさん [sage] 2011/11/10(木) 23:40:30.36 先に書くだけじゃ、2がIntegerになるのは防げないんでしょ? http://echo.5ch.net/test/read.cgi/tech/1317958045/460
461: デフォルトの名無しさん [sage] 2011/11/10(木) 23:54:39.66 >>460 そうだな ただ、一般的には自分で型を書いた方が速い型を選べる (^(2::Int))も出してるのに、そこに拘るってのもどうなのよ? 併用すればいいじゃないかって書いたよな? そこは認めるのか? http://echo.5ch.net/test/read.cgi/tech/1317958045/461
462: デフォルトの名無しさん [sage] 2011/11/11(金) 00:20:31.17 もちろん併用は有効。 だけど>>442に>>443の回答は誤り。 http://echo.5ch.net/test/read.cgi/tech/1317958045/462
463: デフォルトの名無しさん [sage] 2011/11/11(金) 00:32:29.31 >>462 絡むんじゃなくて、こうだから、間違いって指摘しろよ 時間の無駄 http://echo.5ch.net/test/read.cgi/tech/1317958045/463
464: デフォルトの名無しさん [sage] 2011/11/11(金) 00:42:49.60 それこそ beki n = beki' n 2 http://echo.5ch.net/test/read.cgi/tech/1317958045/464
465: デフォルトの名無しさん [sage] 2011/11/11(金) 00:47:17.39 書き損じ・・・ それこそ beki n = beki' n 2 where beki'::double->Int->double beki' n m = n^m なら、ちゃんとn^2そのものを書く前に2の型も決められるしな (さすがに、こんな反論もどうかと思うが) http://echo.5ch.net/test/read.cgi/tech/1317958045/465
466: デフォルトの名無しさん [sage] 2011/11/11(金) 00:49:18.12 要するに型を書けば解決する話。 先に書くか後で書くかは無関係ですな。 http://echo.5ch.net/test/read.cgi/tech/1317958045/466
467: デフォルトの名無しさん [sage] 2011/11/11(金) 03:36:49.91 c言語でのint (*)[4]型っぽいものをhaskell的に表現する場合、 * = Pointer, [] = Array4, int = Intと置き換えて、 Pointer (Array4 Int Int Int Int)とでも書けるんだろうけれど、 int (*)[100]型とかになってくるととても書いていられない。 何か上手い方法はないだろうか。 用途ねーだろって突込みは無しで。 http://echo.5ch.net/test/read.cgi/tech/1317958045/467
468: デフォルトの名無しさん [sage] 2011/11/11(金) 08:48:39.45 >>467 コード生成じゃ駄目? http://echo.5ch.net/test/read.cgi/tech/1317958045/468
469: デフォルトの名無しさん [sage] 2011/11/11(金) 08:49:33.54 Data.Arrayってそういうのじゃないの?使ったことないけど。 http://echo.5ch.net/test/read.cgi/tech/1317958045/469
470: デフォルトの名無しさん [sage] 2011/11/12(土) 01:01:56.40 reactive-glutを試そうとしたら依存パッケージのcategory-extrasがインストールできなかった。 out of dateなパッケージかどうかすぐに分かる手段ってあるのかな。 http://echo.5ch.net/test/read.cgi/tech/1317958045/470
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 508 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.019s