[過去ログ] 関数型プログラミング言語Haskell Part16 (978レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
442
(3): 2011/11/10(木)17:40 AAS
先に型を書くというのはそういうのを防ぐためにも役に立つのかな
443
(2): 2011/11/10(木)17:48 AAS
はい
役に立ちます
444
(1): 2011/11/10(木)18:08 AAS
いや役に立たんだろ
コードを書いてない段階でどうやって(a^2)の2に型を指定するんだ
445
(1): 2011/11/10(木)18:27 AAS
>>444
え、どう言う型を受け取って、どう言う型を返したいか、を考えて指定すれば良いだけだよ?
446: 2011/11/10(木)19:47 AAS
>>418
Yampa 関連のドキュメントは論文も含めてけっこう多いので、
どれがオリジナルなのかもさっぱりなんですが、
どれも個々の特徴を割り下げてたり、活用したり、
さもなければ全体を長々と解説してる感じのものばかり

もっと、全体の構造をスパッと語ってくれると、
それだけでもありがたいのですが、無いですね

reactive も勉強してみたんです
シンクの仕組みがなかなか独特で面白かったんですけど、
結局これは「今はまだ」使えんと思いました

挙動が予測と噛み合わない部分や、予測し難い部分がちょくちょくあるんですよね
例えば integral 関数を使ってると、タイムリークを起こすと言うのかな、
間に合わなかった計算処理がどんどん積み上がっていって次第に処理が遅くなりました

この辺り Yampa なら react 関数を呼ぶ(呼ばれる)タイミングを
そのタイミングの処理の重さに合わせてリアルタイムに調整することは楽にできるんですが、
reactive ではその辺りどうやればいいのかよく分からない
447
(1): 2011/11/10(木)19:53 AAS
>>445
(^) :: (Num a, Integral b) => a -> b -> a
だから、(a^2)の2の型が何になっても、式全体の型には関わってこない
448
(1): 2011/11/10(木)20:31 AAS
>>447
こうすりゃいいじゃん

(^(2::Int))
449
(1): 2011/11/10(木)21:08 AAS
>>448
それ>>442の話と関係なくね?
450
(2): 2011/11/10(木)21:24 AAS
>>449
自作の関数作るときとかは、型推論に任せるより自分で決めた方が速かったり、逆に遅い代わりに大きな数を扱えたりする
length関数と同じ機能の関数mylength作るとき、

mylength [] = 0
mylength (_:ns) = 1 + mylength ns

の型は[a]->aだが、

mylength::[a]->Int
mylength [] = 0
mylength (_:ns) = 1 + mylength ns

とすれば、当然ながら型は[a]->Intになる
451: 2011/11/10(木)21:26 AAS
訂正

x [a]->a
o [t]->a
452
(1): 2011/11/10(木)22:01 AAS
>>450
だからそれは(a^2)のケースでは関係ないよね
453
(1): 2011/11/10(木)22:06 AAS
>>452
自分で作る関数なら自分で型を決めればいいし、すでにある関数なら、引数に渡す値の方の型を決める他あるまい
454
(1): 2011/11/10(木)22:16 AAS
>>453
大抵の場合は、自分で作る関数の型さえ決めれば型推論で自動的に全ての型が決まるんだよ
それだけで決まらないこともときどきあって、(^)はそれを発生させる例の筆頭
455: 2011/11/10(木)22:33 AAS
>>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
456
(1): 2011/11/10(木)22:48 AAS
>>441は何も質問してないのに回答とかよくわからん
俺は>>442に対する>>443の回答に反論してるだけだよ
457: 2011/11/10(木)23:17 AAS
>>456
ん、んんん?
だったら、>>450の通り、先に型を書けば防げてるだろ?
(^(2::Int))は併用すればいい話じゃね?
ごちゃ混ぜに話すなよ
458
(1): 2011/11/10(木)23:20 AAS
何が防げてるの?
459: 2011/11/10(木)23:32 AAS
>>458
遅いIntegerやNum aを使うのを防げてるだろ

だあ、もう

beki1 a = a ^ 2

beki2 :: Int -> Int
beki2 a = a ^ 2

beki3::Int -> Int
beki3 a = a ^ 2::Int

下に行くほど、遅い型を使うの防げてる

以上
460
(1): 2011/11/10(木)23:40 AAS
先に書くだけじゃ、2がIntegerになるのは防げないんでしょ?
461: 2011/11/10(木)23:54 AAS
>>460
そうだな
ただ、一般的には自分で型を書いた方が速い型を選べる

(^(2::Int))も出してるのに、そこに拘るってのもどうなのよ?
併用すればいいじゃないかって書いたよな?
そこは認めるのか?
462
(1): 2011/11/11(金)00:20 AAS
もちろん併用は有効。
だけど>>442>>443の回答は誤り。
463: 2011/11/11(金)00:32 AAS
>>462
絡むんじゃなくて、こうだから、間違いって指摘しろよ
時間の無駄
464: 2011/11/11(金)00:42 AAS
それこそ

beki n = beki' n 2
465: 2011/11/11(金)00:47 AAS
書き損じ・・・

それこそ

beki n = beki' n 2
where
beki'::double->Int->double
beki' n m = n^m

なら、ちゃんとn^2そのものを書く前に2の型も決められるしな
(さすがに、こんな反論もどうかと思うが)
466: 2011/11/11(金)00:49 AAS
要するに型を書けば解決する話。
先に書くか後で書くかは無関係ですな。
467
(1): 2011/11/11(金)03:36 AAS
c言語でのint (*)[4]型っぽいものをhaskell的に表現する場合、
* = Pointer, [] = Array4, int = Intと置き換えて、
Pointer (Array4 Int Int Int Int)とでも書けるんだろうけれど、
int (*)[100]型とかになってくるととても書いていられない。
何か上手い方法はないだろうか。
用途ねーだろって突込みは無しで。
468: 2011/11/11(金)08:48 AAS
>>467
コード生成じゃ駄目?
469: 2011/11/11(金)08:49 AAS
Data.Arrayってそういうのじゃないの?使ったことないけど。
470: 2011/11/12(土)01:01 AAS
reactive-glutを試そうとしたら依存パッケージのcategory-extrasがインストールできなかった。
out of dateなパッケージかどうかすぐに分かる手段ってあるのかな。
471
(1): 2011/11/12(土)08:11 AAS
ListはもうEducationalモジュールに引っ越せ
1-
あと 507 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.016s