[過去ログ]
関数型プログラミング言語Haskell Part16 (978レス)
関数型プログラミング言語Haskell Part16 http://echo.5ch.net/test/read.cgi/tech/1317958045/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
430: デフォルトの名無しさん [sage] 2011/11/09(水) 20:13:01.58 >>429 無視してると言いながら、書いちゃったらダメだよ。次からは何も言わないようにね♪ http://echo.5ch.net/test/read.cgi/tech/1317958045/430
431: デフォルトの名無しさん [sage] 2011/11/09(水) 20:16:28.69 >>430 と言いつつも書いてるヤシ http://echo.5ch.net/test/read.cgi/tech/1317958045/431
432: デフォルトの名無しさん [sage] 2011/11/09(水) 20:17:49.21 http://ja.wikipedia.org/wiki/%E8%87%AA%E5%B7%B1%E8%A8%80%E5%8F%8A%E3%81%AE%E3%83%91%E3%83%A9%E3%83%89%E3%83%83%E3%82%AF%E3%82%B9 にならないかなってね。 http://echo.5ch.net/test/read.cgi/tech/1317958045/432
433: デフォルトの名無しさん [sage] 2011/11/09(水) 20:28:11.17 >>419 -Wallは要らないんじゃね?うざいし 型のデフォルト化ってのは http://www.kotha.net/ghcguide_ja/latest/interactive-evaluation.html の最後に書いてあるやつ ただなんでこれで警告対象なのかは分からない、誰か詳しい人居る? 型のデフォルト化は標準で警告出すほどではないけどオススメできないことなんだろうか http://echo.5ch.net/test/read.cgi/tech/1317958045/433
434: デフォルトの名無しさん [sage] 2011/11/09(水) 20:43:09.66 知らないうちにInteger使っててパフォーマンスがやばい、 みたいなのを回避したいんじゃね、知らんけど http://echo.5ch.net/test/read.cgi/tech/1317958045/434
435: デフォルトの名無しさん [sage] 2011/11/09(水) 21:55:59.53 代数データ型のラベルの名前って、みなさんどうしてますか? (ラベルでなくともアクセス関数を自作しても本質的には同じ事です) 例えばの話でブロック崩しを作ってるとして、 ボールの状態を表すための情報が要りますよね まぁざっと、位置ベクトル、速度ベクトル、あとはボールの半径を盛り込むとしましょう data Ball = Ball { ballPos :: Vector2 , ballVel :: Vector2 , ballRad :: Double } 私はこうやって、位置を表す Pos や速度を表す Vel などに、接頭辞として 必ずそのデータ型の型構築子(値構築子ではなく)の名前を付けるようにしています と言うのも、ではボールの他にバーやブロックの情報はどうなるかと言えば、 こちらも位置を表す情報は必要で、他にも重なる部分がいくつか出てきます 同じ pos という関数名を使い回すことが文法上できないので、 上記の方法でやるなら名前の中で何らかの区別をしなければならず、 であるなら変に省略文字で区別するよりは、もうフルネームで区別した方がマシだろ という判断です このように、複数のデータ型で同じ意味の情報を扱う場合のラベル名(アクセス関数名)は、 みなさんどうしてるのでしょうか 共通の情報は型クラスに追いやって、インスタンス化してるのでしょうか その場合は、その関数の引数として対象のデータ型の値が要りますね http://echo.5ch.net/test/read.cgi/tech/1317958045/435
436: デフォルトの名無しさん [sage] 2011/11/09(水) 22:01:28.32 俺も型名やその省略形を接頭辞にする http://echo.5ch.net/test/read.cgi/tech/1317958045/436
437: デフォルトの名無しさん [sage] 2011/11/09(水) 22:54:34.31 ぽこぽこサブモジュールを作る。 http://echo.5ch.net/test/read.cgi/tech/1317958045/437
438: デフォルトの名無しさん [sage] 2011/11/09(水) 22:57:12.57 >>434 http://www.kotha.net/ghcguide_ja/latest/options-sanity.html に -fwarn-type-defaults: 数値型に対するデフォルト化機構が発動したときに警告・通知する。 これは、あるデフォルトを前提としたコードを別のデフォルトの下のコードに変換するときに便利である。 例えば、1という値に特に制約がないとき、Haskell 1.4の「デフォルトのデフォルト」は型Intを与えるが、 Haskell 98以降ではこれはIntegerである。 これは実行時性能と挙動に影響を与える可能性があるので、通知されると便利である。 って書いてあるからまさにその通りだと思う パフォーマンスをカリカリに追求する場合にはこの警告が必要なんだろう 俺はそんなコード書いたこと無いけど http://echo.5ch.net/test/read.cgi/tech/1317958045/438
439: デフォルトの名無しさん [sage] 2011/11/09(水) 23:04:27.78 >>435 > その場合は、その関数の引数として対象のデータ型の値が要りますね これはデータ型に直接ラベルを定義しても同じ事でした、すいません >>436 やはり、そうしますか >>437 サブモジュールをどのように作って、どのようにアクセスさせているのでしょうか モジュールを分けても、データ型のその情報にアクセスする為には関数が必要で、 当然その関数は各モジュールからエクスポートさせるのですよね ボールの位置、バーの位置、ブロックの位置などの情報に対するアクセス関数の 名前のバッティングはどうしてるのでしょうか もしかして、各モジュールをインポートする時に as で別名を与えてるのでしょうか http://echo.5ch.net/test/read.cgi/tech/1317958045/439
440: デフォルトの名無しさん [sage] 2011/11/09(水) 23:15:13.56 >>439 うん。asで適当に別名付けてる。 http://echo.5ch.net/test/read.cgi/tech/1317958045/440
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
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 519 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.012s