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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
430
(1): デフォルトの名無しさん [sage] 2011/11/09(水) 20:13:01.58 AAS
>>429
429(1): デフォルトの名無しさん [sage] 2011/11/09(水) 20:05:25.66 AAS
さて、我慢して無視を決め込んだhaskellerは何人居るでしょうw
(一応、私も含む)
無視してると言いながら、書いちゃったらダメだよ。次からは何も言わないようにね♪
431: デフォルトの名無しさん [sage] 2011/11/09(水) 20:16:28.69 AAS
>>430
と言いつつも書いてるヤシ
432: デフォルトの名無しさん [sage] 2011/11/09(水) 20:17:49.21 AAS
外部リンク:ja.wikipedia.org
にならないかなってね。
433: デフォルトの名無しさん [sage] 2011/11/09(水) 20:28:11.17 AAS
>>419
419(1): デフォルトの名無しさん [sage] 2011/11/08(火) 23:20:26.24 AAS
>>403
ありがとう。ただcabalの設定ファイルだと俺の環境ではうまく行かなかった
それを手がかりに調べて、ホーム\AppData\Roaming\ghc\ghci.confに書いたらうまくいった
-Wall付けたら警告いっぱい出て、パターンマッチが網羅されてないとか役立つのもあったけど
ただ数値のデフォルト化の警告?ってのがよく分からん
警告なんだから良くないコードなんだろうけど
 
書く環境はやっぱりemacsが多いのか
今まであまり使ってなくて不慣れだけど頑張ってみるよ
-Wallは要らないんじゃね?うざいし
型のデフォルト化ってのは
外部リンク[html]:www.kotha.net
の最後に書いてあるやつ
ただなんでこれで警告対象なのかは分からない、誰か詳しい人居る?
型のデフォルト化は標準で警告出すほどではないけどオススメできないことなんだろうか
434
(1): デフォルトの名無しさん [sage] 2011/11/09(水) 20:43:09.66 AAS
知らないうちにInteger使っててパフォーマンスがやばい、
みたいなのを回避したいんじゃね、知らんけど
435
(1): デフォルトの名無しさん [sage] 2011/11/09(水) 21:55:59.53 AAS
代数データ型のラベルの名前って、みなさんどうしてますか?
(ラベルでなくともアクセス関数を自作しても本質的には同じ事です)

例えばの話でブロック崩しを作ってるとして、
ボールの状態を表すための情報が要りますよね
まぁざっと、位置ベクトル、速度ベクトル、あとはボールの半径を盛り込むとしましょう

data Ball = Ball
      { ballPos :: Vector2
      , ballVel :: Vector2
      , ballRad :: Double }

私はこうやって、位置を表す Pos や速度を表す Vel などに、接頭辞として
必ずそのデータ型の型構築子(値構築子ではなく)の名前を付けるようにしています

と言うのも、ではボールの他にバーやブロックの情報はどうなるかと言えば、
こちらも位置を表す情報は必要で、他にも重なる部分がいくつか出てきます
同じ pos という関数名を使い回すことが文法上できないので、
上記の方法でやるなら名前の中で何らかの区別をしなければならず、
であるなら変に省略文字で区別するよりは、もうフルネームで区別した方がマシだろ
という判断です

このように、複数のデータ型で同じ意味の情報を扱う場合のラベル名(アクセス関数名)は、
みなさんどうしてるのでしょうか

共通の情報は型クラスに追いやって、インスタンス化してるのでしょうか
その場合は、その関数の引数として対象のデータ型の値が要りますね
436
(1): デフォルトの名無しさん [sage] 2011/11/09(水) 22:01:28.32 AAS
俺も型名やその省略形を接頭辞にする
437
(1): デフォルトの名無しさん [sage] 2011/11/09(水) 22:54:34.31 AAS
ぽこぽこサブモジュールを作る。
438: デフォルトの名無しさん [sage] 2011/11/09(水) 22:57:12.57 AAS
>>434
外部リンク[html]:www.kotha.net
-fwarn-type-defaults:
数値型に対するデフォルト化機構が発動したときに警告・通知する。
これは、あるデフォルトを前提としたコードを別のデフォルトの下のコードに変換するときに便利である。
例えば、1という値に特に制約がないとき、Haskell 1.4の「デフォルトのデフォルト」は型Intを与えるが、
Haskell 98以降ではこれはIntegerである。
これは実行時性能と挙動に影響を与える可能性があるので、通知されると便利である。
って書いてあるからまさにその通りだと思う
パフォーマンスをカリカリに追求する場合にはこの警告が必要なんだろう
俺はそんなコード書いたこと無いけど
439
(1): デフォルトの名無しさん [sage] 2011/11/09(水) 23:04:27.78 AAS
>>435
> その場合は、その関数の引数として対象のデータ型の値が要りますね
これはデータ型に直接ラベルを定義しても同じ事でした、すいません

>>436
やはり、そうしますか

>>437
サブモジュールをどのように作って、どのようにアクセスさせているのでしょうか

モジュールを分けても、データ型のその情報にアクセスする為には関数が必要で、
当然その関数は各モジュールからエクスポートさせるのですよね

ボールの位置、バーの位置、ブロックの位置などの情報に対するアクセス関数の
名前のバッティングはどうしてるのでしょうか

もしかして、各モジュールをインポートする時に as で別名を与えてるのでしょうか
440: デフォルトの名無しさん [sage] 2011/11/09(水) 23:15:13.56 AAS
>>439
うん。asで適当に別名付けてる。
441
(2): デフォルトの名無しさん [sage] 2011/11/10(木) 17:18:49.29 AAS
確かに(a^2)と書いただけで(2::Integer)と推論されて
重いIntegerの(^)が呼ばれるのは嫌なことがある(aはDoubleとして)
442
(3): デフォルトの名無しさん [sage] 2011/11/10(木) 17:40:52.38 AAS
先に型を書くというのはそういうのを防ぐためにも役に立つのかな
443
(2): デフォルトの名無しさん [sage] 2011/11/10(木) 17:48:18.08 AAS
はい
役に立ちます
444
(1): デフォルトの名無しさん [sage] 2011/11/10(木) 18:08:46.39 AAS
いや役に立たんだろ
コードを書いてない段階でどうやって(a^2)の2に型を指定するんだ
445
(1): デフォルトの名無しさん [sage] 2011/11/10(木) 18:27:39.40 AAS
>>444
え、どう言う型を受け取って、どう言う型を返したいか、を考えて指定すれば良いだけだよ?
446: デフォルトの名無しさん [sage] 2011/11/10(木) 19:47:03.85 AAS
>>418
418(1): デフォルトの名無しさん [sage] 2011/11/08(火) 20:46:15.86 AAS
オリジナルのYampaのドキュメント意味分からんよな
AnimasっていうYampaのfork版だともう少しまともなドキュメントになってたけどやっぱりよくわからん
俺はelereaとかreactive-bananaとかの方が遥かに使いやすいと思ったわ
実行効率もいいしな
Yampa 関連のドキュメントは論文も含めてけっこう多いので、
どれがオリジナルなのかもさっぱりなんですが、
どれも個々の特徴を割り下げてたり、活用したり、
さもなければ全体を長々と解説してる感じのものばかり

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

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

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

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

(^(2::Int))
449
(1): デフォルトの名無しさん [sage] 2011/11/10(木) 21:08:18.64 AAS
>>448
それ>>442の話と関係なくね?
450
(2): デフォルトの名無しさん [sage] 2011/11/10(木) 21:24:40.76 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: デフォルトの名無しさん [sage] 2011/11/10(木) 21:26:17.73 AAS
訂正

x [a]->a
o [t]->a
452
(1): デフォルトの名無しさん [sage] 2011/11/10(木) 22:01:08.03 AAS
>>450
だからそれは(a^2)のケースでは関係ないよね
453
(1): デフォルトの名無しさん [sage] 2011/11/10(木) 22:06:04.65 AAS
>>452
自分で作る関数なら自分で型を決めればいいし、すでにある関数なら、引数に渡す値の方の型を決める他あるまい
454
(1): デフォルトの名無しさん [sage] 2011/11/10(木) 22:16:47.46 AAS
>>453
大抵の場合は、自分で作る関数の型さえ決めれば型推論で自動的に全ての型が決まるんだよ
それだけで決まらないこともときどきあって、(^)はそれを発生させる例の筆頭
1-
あと 524 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.015s