関数型プログラミング言語Haskell Part19
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/06/27(水) 10:21:10.18ttp://www.haskell.org/
日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
0075デフォルトの名無しさん
2012/06/30(土) 19:58:22.730076デフォルトの名無しさん
2012/06/30(土) 23:13:18.06セキュリティ系のハッカーがかっこいいってどんな価値観だよ。
厨二病にも程があるだろ
0077デフォルトの名無しさん
2012/06/30(土) 23:15:14.06大きくなっちゃうだろ
0078デフォルトの名無しさん
2012/06/30(土) 23:19:26.51行数=仕事量の考えが染み着いてるIT土方にとって脅威でしかないからパニックになるのもしかたないな
0079デフォルトの名無しさん
2012/06/30(土) 23:57:33.50DSL(Haskellコードの一部)から他言語へのトランスレート
つまり、自動プログラミングをやりたい
0080デフォルトの名無しさん
2012/07/01(日) 00:09:09.37他人のコードを読むときと1年くらい後にコードを読むときに物凄く役に立つと思います
0081デフォルトの名無しさん
2012/07/01(日) 02:11:59.35しかも縁もゆかりもない赤の他人のために神経を使ってる感じ
0082デフォルトの名無しさん
2012/07/01(日) 05:07:28.610083デフォルトの名無しさん
2012/07/01(日) 05:58:53.610084デフォルトの名無しさん
2012/07/01(日) 09:24:00.59リワハ済んだだけの若造にはまだ早い?
0085デフォルトの名無しさん
2012/07/01(日) 09:49:33.360086デフォルトの名無しさん
2012/07/01(日) 12:33:40.07質問の内容と意図がいまひとつ分らない。
もう少し詳しく話してくれないか。
どういった状況において FRP をどう利用しようとしていて、
どういった文脈でそのコード片が出てくるのか。
少なくともそれくらいは離してくれないと、何ともレスしようがない。
0087デフォルトの名無しさん
2012/07/01(日) 13:00:07.17RWH読んだなら十分
使うライブラリによってはApplicativeやArrowの知識が要ることがあるけど、
それは必要に応じてやればいい
0088デフォルトの名無しさん
2012/07/02(月) 15:21:02.060089デフォルトの名無しさん
2012/07/02(月) 15:38:37.38似非ハッカーが弄ってるだけの実用性0のオナニー言語
0090デフォルトの名無しさん
2012/07/02(月) 15:48:07.350091デフォルトの名無しさん
2012/07/02(月) 16:28:58.97THを使うより使わないほうがいい
後の禅オブHaskellである
0092デフォルトの名無しさん
2012/07/02(月) 17:04:34.12とか勘違いしてる馬鹿がいるね
0093デフォルトの名無しさん
2012/07/02(月) 17:33:14.38遅延IOはハンドル閉じるのが難しいっつー切実な問題があるからなぁ
0094デフォルトの名無しさん
2012/07/02(月) 20:04:29.45ハッカー=弱い型
と勘違いしてる京都の社長さんもいたねぇ
0095デフォルトの名無しさん
2012/07/02(月) 20:40:03.330096デフォルトの名無しさん
2012/07/02(月) 21:17:36.28http://cielquis.net/religion/results/2cf68ea14896ef51940cdc3dbfe96ed5a1084ccd.html
0097デフォルトの名無しさん
2012/07/02(月) 21:49:34.66断言するが、ハッカーしか使えない言語は有害
0098デフォルトの名無しさん
2012/07/02(月) 21:59:54.13知的優位立ちたがるためにHaskellやってんだろ???シュシュ
一般的名プログラミング言語をやってるやつに対して
キモヲタ「関数型プログラミング言語って知ってる?(ドヤッ)」
人間君「うむむむ」
っで知的優位に立ちたがる
マジゴミだな
なあ?出せー世お前シュシュ
お前らゴミクズよりなんかセキュリティハッカーのほうがまじすげーよ
お前らはゴミ
実用性にかける
面白みもない派手さにかける
カス
0099デフォルトの名無しさん
2012/07/02(月) 22:00:25.210100デフォルトの名無しさん
2012/07/02(月) 22:01:38.73素直に答えろよ
0101デフォルトの名無しさん
2012/07/02(月) 22:05:49.92プログラミングでカッコよさや面白みを追及するヤツは有害
0102デフォルトの名無しさん
2012/07/02(月) 22:09:17.930103デフォルトの名無しさん
2012/07/02(月) 22:24:38.17おそらく原点であろう論文「Functional Reactive Animation」を読みましたが、
よく分らない部分があります。
data Behavior a =
(Time -> (a, Behavior a))
(Ivl Time -> (Ivl a, Behavior a))
このビヘイビアの定義でインターバルを導入する意図は分ります。
(論文の最後のサンプルコードでなるほどと思いました)
しかし、Behavior a 型の値をどうやって作るのでしょうか。
Time によって値の変わらない定数的なビヘイビアなら簡単に作れますが、
たとえば Time -> Bool という型の関数を Behavior Bool 型にリフトアップするには、
どうすればいいのでしょうか。
具体的には、どうやって Ivl Time -> (Ivl a, Behavior a) 型の関数を作るか、です。
論文にはこの辺りの事は何も書かれていなかったと思うのですが、
もしかして私は何かどんでもない勘違いをしているでしょうか。
0104デフォルトの名無しさん
2012/07/02(月) 22:27:16.92お前とは一生無縁な話だろw
0105デフォルトの名無しさん
2012/07/02(月) 22:36:55.11仮に私と無縁ししましょう
そこら辺の零細ソフト会社のプログラマに、ハッカーしか使えない言語のメンテナンスができると思いますか?
そして、そのハッカーしか使えない言語を使えるようにするための教育コストのことを考えたことがありますか?
さらに、そんな言語が医療機器や金融関連のインフラに混入してたときの恐怖を想像できますか?
0106デフォルトの名無しさん
2012/07/02(月) 22:41:47.08スパゲッティすぎて負えない
0107デフォルトの名無しさん
2012/07/02(月) 23:25:04.02システムを作る人間とシステムを所有する人間が一致しないことなんだよな
0108デフォルトの名無しさん
2012/07/02(月) 23:36:24.67C++のことですよね。たいへんよくわかります
0109デフォルトの名無しさん
2012/07/02(月) 23:58:17.120110デフォルトの名無しさん
2012/07/03(火) 00:01:56.59どうでもいいけど
0111デフォルトの名無しさん
2012/07/03(火) 01:35:58.002000年問題のときにATMのソースコードの一部を眺めるチャンスがあったけど、機械語の「ソースファイル」を見付けたときは吹いた
0112デフォルトの名無しさん
2012/07/03(火) 06:33:56.400113デフォルトの名無しさん
2012/07/03(火) 07:03:40.660114デフォルトの名無しさん
2012/07/03(火) 07:17:49.92Haskellを使ってる => 変わり者
Haskellが難しくて習得出来なかったのが悔しくて煽りにくる => 低能
0115113
2012/07/03(火) 08:55:36.05変わり者って書くなよ
それが凄いことだと思ってはじめるやついるぞ
たとえば
xxxx=>HENTAI
とか書いちゃうと
世界で変態って言葉通じるだろ?
それもコミュニケーションで使えるし
変態は凄いことって定着してるから
そのxxxxを真似したくなるやつがでる
そういうのやめたほうがいい
それなら"ふつう”って書いとけ
人と違うことをやって ”「それまでの普通」ではない事に挑戦するのが面白い。”
つまりこいつらは ”奇特”、”超人的”にあこがれてるから
変態とか変わり者って書くと 普通から脱却したくて人間の個性の差別化を図りだすから
Haskellを使ってる=>”ふつう”ってかいとけ
わかったか?
でも”ふつう”って書くと、大衆に影響受けるやつは ”ふつう”なんだってなるだろ?
”ふつう”だから皆使ってるだろう 自分も使ってないと乗り遅れてるってなるだろ?
君の書き込みのせいでHaskellユーザーが増えたりする場合あるからやめろ
そういうのは書かなくていい
0116デフォルトの名無しさん
2012/07/03(火) 08:57:06.620117デフォルトの名無しさん
2012/07/03(火) 09:09:00.57毎度スパゲッティしんどいんだわ
0118デフォルトの名無しさん
2012/07/03(火) 09:11:00.96使っちゃったー。ショボイスクリプトだけどね
0119デフォルトの名無しさん
2012/07/03(火) 09:19:40.970120デフォルトの名無しさん
2012/07/03(火) 09:48:46.070121デフォルトの名無しさん
2012/07/03(火) 11:44:10.860122103
2012/07/03(火) 12:53:21.95私へのレスでしょうか。
インターバルを導入する前のただの Behavior a には、
表示的意味論として確かに liftn が示されています。
(ここからただちに Haskell の関数も書けるので、定義されたも同然ですね)
しかし、インターバルを導入した後の Behavior a には、
liftn がどういった意味論になるのか示されていません。
正確に言えば、意味論自体は先ほどとほぼ同じで言わずもがなだと思いますが、
実際に Haskell の関数を定義しようとすると、
インターバルの扱いをどうすればいいのかよく分らないのです。
これ、引数で渡した Ivl Time 型の値をもとに、
つまりどの区間の時間かをもとに戻り値を計算するわけですよね。
どうやって計算するのでしょうか。
0123デフォルトの名無しさん
2012/07/03(火) 15:47:30.82newSpaghetti xs = Spaghetti (\i->(take i xs, newSpaghetti (drop i xs)))
0124デフォルトの名無しさん
2012/07/03(火) 23:16:00.60区間解析そのものの詳細は資料参考にしろってことじゃないの?
0125デフォルトの名無しさん
2012/07/04(水) 04:49:32.260126デフォルトの名無しさん
2012/07/04(水) 06:13:30.38もっと生産性の高いメジャー言語でバリバリコードを書く
ここにいるやつらは漏れなく自分が頭いいと勘違いして人と違う言語を使いたいだけのアホ
0127デフォルトの名無しさん
2012/07/04(水) 06:30:22.260128デフォルトの名無しさん
2012/07/04(水) 06:52:00.070129デフォルトの名無しさん
2012/07/04(水) 07:45:19.59Haskellでまともにコード書けない低能のお前には
他言語と比較してHaskellの生産性が低いかどうかすら
判断できないじゃん
0130デフォルトの名無しさん
2012/07/04(水) 12:06:39.18低能にはhaskellは使えないっていう姿勢がまず間違いなんだよ
プログラミング言語は可能な限り平易であるべき
理論が先走っちゃってただ出入力するだけでもモナドとか訳のわからないものを使わなきゃいけないhaskellはただのオナニー言語でしかない
だいたいhaskellの売りである堅牢な型システムはチームでの開発でこそ威力を発揮するのに、低能は引っ込んでろじゃ意味ないだろバカ
0131デフォルトの名無しさん
2012/07/04(水) 12:08:13.67じゃ、おまえは何がネイティブランゲージなの?
PHPとか?
0132デフォルトの名無しさん
2012/07/04(水) 12:10:16.15土方には必要ない。
土方は頭数仕事しりゃいい。
0133デフォルトの名無しさん
2012/07/04(水) 12:38:54.80目的に応じて適切な言語を選ぶだけ
ネイティブランゲージ(笑)
0134デフォルトの名無しさん
2012/07/04(水) 12:49:42.860135デフォルトの名無しさん
2012/07/04(水) 15:31:56.31haskell界の髭男爵はどうなの?
0136デフォルトの名無しさん
2012/07/04(水) 19:18:58.43Haskellが分からないなら分かるまで待とう
堅牢なシステムには余裕が必要なのに、可能な限り短時間で分かろうとするのは間違いだ
0137デフォルトの名無しさん
2012/07/04(水) 19:37:29.40Haskell自体はさして難解でもないのに、大した努力もせずにすぐに投げ出したり意味がないと決めつけたりすることが低脳なわけ そんな人間はどこにいっても役に立たないから、引っ込んでてほしいの
0138デフォルトの名無しさん
2012/07/04(水) 21:18:08.980139デフォルトの名無しさん
2012/07/04(水) 22:01:27.940140デフォルトの名無しさん
2012/07/04(水) 22:29:43.980141デフォルトの名無しさん
2012/07/04(水) 22:33:00.76くだらない相手を名指ししないことで生産性を高める
0142103
2012/07/04(水) 22:36:21.22論文の参考資料をいくつか辿ってみました。
区間解析そのものがどういうモノかはそれで分りますが、
連続値を引数とする関数 f を、区間を引数として区間を返す関数 g に変換する
効率の良い方法は結局のところ分りませんでした。
非効率で不正確な方法ならすぐに思いつきます。
入力された区間を適当にサンプリングして関数 f を適用し、
戻り値の最小値と最大値を区間として戻すような関数 g を定義すればいいです。
(Bool 型なら最小値 = False、最大値 = True として計算)
しかし、Behavior a 型の値に関数 during を適用する度にこんな計算をしていては、
アニメーション処理が間に合わず、使い物になりません。
Functional Reactive Animation の Predicate Event Detection のコードでは、
Behavior Bool 型の値への関数 during の適用が効率よく行えることを前提としていますが、
どなたか何かアイデアはないでしょうか。
Functional Reactive Animation では入力となる時間が単調増加なので、
その辺りを上手く利用するのではないかと思うのですが、今の私には思いつきません。
あと、>>122 で区間バージョンの Behavior a には liftn が定義されていないと言いましたが、
実際には同論文内で lift2 の意味論はちゃんと定義されていました。
ただ、肝心の関数 during は定義されていないので、実装的には情報不足です。
0143デフォルトの名無しさん
2012/07/05(木) 01:57:38.60分からん人にとっては、宣伝の割につまらんという意味で韓流と同じだからな…
0144デフォルトの名無しさん
2012/07/05(木) 06:39:49.13ホトトギス
0145デフォルトの名無しさん
2012/07/05(木) 06:42:11.170146デフォルトの名無しさん
2012/07/05(木) 07:10:11.43Haskell の関数定義や式などで型を明示する時に使うのなら、
「型宣言」と訳すこともできると思います。
0147デフォルトの名無しさん
2012/07/05(木) 07:26:56.49代数モデルなんかの文脈なら「指標」って訳語が一般的っぽいけど。(すげぇミスマッチな気がするけど)
ていうかどの文脈のsignature?
0148デフォルトの名無しさん
2012/07/05(木) 07:36:41.20の文脈です
0149デフォルトの名無しさん
2012/07/05(木) 08:18:26.76その意味の「文脈」じゃねえよwwwwwwwww
そのsignatureは何に関する話題で出てきた用語なの?ってこと。
メールとか認証に使う「署名」だってsignatureじゃん?
名前と型のセットもsignature。
代数モデルなんかの文脈だと、「指標」って訳語が一般的みたいだけど、
普通のプログラマや、言語リファレンスで使われてるのは見たことない。
カタカナでシグネチャが普通じゃん?
0150デフォルトの名無しさん
2012/07/05(木) 08:53:55.500151デフォルトの名無しさん
2012/07/05(木) 09:26:08.020152デフォルトの名無しさん
2012/07/05(木) 09:45:20.51そのモジュールをインポートしたとき
インスタンス宣言をする事は不可能なのですか?
インポート → 再エキスポートする際に
どうも隠す人がいるようです
0153デフォルトの名無しさん
2012/07/05(木) 12:44:09.15型クラスが自身を実装する関数を公開しない
この文の意味がまず分らない。
自身を実装するというのは、その型クラスのインスタンスを定義する事だよね。
その関数を公開しないというのは、インスタンス内で定義されている関数の事?
それを公開するかどうかは型クラス側は全く関与しない事だと思うけど。
簡単なサンプルコードを出してくれないか。
0154デフォルトの名無しさん
2012/07/06(金) 01:18:43.75Eq は not が実装されてる
0155デフォルトの名無しさん
2012/07/06(金) 09:36:47.76答えになってない
0156デフォルトの名無しさん
2012/07/06(金) 11:23:57.16infixr 1 >::>
(>::>) = flip ($) -- x >::> f = f x
shift = id -- shift f = \x -> f x
calc =
shift $ \x ->
x + 2 >::> \x ->
shift $ \y ->
y + x >::> \y ->
x * y
意訳
calc{
x = shift;
x = x+2;
y = shift;
y = y + x;
return x * y;
}
shiftはperlのshiftみたいに、引数をとってくる
Monadやらで
do
x <- hoge1
x <- hoge2
と書けるのと同じことだけどね
0157デフォルトの名無しさん
2012/07/06(金) 15:22:43.930158Perl忍者 ◆M5ZWRnXOj6
2012/07/06(金) 16:06:46.86芸が無いな
0159デフォルトの名無しさん
2012/07/06(金) 16:31:50.120160デフォルトの名無しさん
2012/07/06(金) 16:43:11.25そもそも、アップキャストが無いんだから
> この型クラスを実装してるんだったら
はすべて静的に解決できる。
0161デフォルトの名無しさん
2012/07/06(金) 16:48:06.98C#の話で悪いが、あるViewがINavigationAwareインスタンスを実装しているならNavigation=画面の遷移時にメソッドを呼ぶとか言うような場合、Haskellだとどうするの?
0162デフォルトの名無しさん
2012/07/06(金) 18:03:52.22値構築子でパターンマッチして処理を分岐するコードが、
実行時には何を見て分岐してるかってことになるのかな?
0163デフォルトの名無しさん
2012/07/06(金) 18:14:53.17.NETじゃない方のWindowsプログラミングをするとか
0164デフォルトの名無しさん
2012/07/06(金) 23:25:53.710165デフォルトの名無しさん
2012/07/07(土) 00:46:02.25時々使いたくなるとしても
アップキャストは不要だろ
0166デフォルトの名無しさん
2012/07/07(土) 02:20:45.940167デフォルトの名無しさん
2012/07/07(土) 07:03:08.82ねかまきずこ?
0168デフォルトの名無しさん
2012/07/07(土) 09:29:05.42すまん、なんでダウンキャストいらないのか教えてくれ
0169デフォルトの名無しさん
2012/07/07(土) 10:01:27.90データの種類(クラス)に応じて振舞いを切り替えるには、
・クラスの実装側でメソッドをオーバーライドする
・オブジェクトの使用側でダウンキャストする
のどちらかになる。
ライブラリ側に親クラスがある場合、親クラスのメソッドは増やせないので、ダウンキャストが必要になる。
Haskellでは、代数的データ型を使って複数のデータの種類を表現するので、ダウンキャストが必要ない。
他の静的型付け関数型言語でも同じ。
ちなみに代数的データ型はScalaのオブジェクト指向の case classに対応する。
0170デフォルトの名無しさん
2012/07/07(土) 10:03:07.24・ダウンキャストは代替手段が存在する
・ダウンキャストを必要とするレガシーコードがあるわけでもない
0171デフォルトの名無しさん
2012/07/07(土) 10:04:44.97環境をクロージャに入れてしまえば、どんなデータでも関数の中で操作できてしまうからだ。
どうしても型に応じたディスパッチがしたいならば、型クラスと存在型が必要になる。ググれ。
それも流儀のひとつと言えなくもないけども、個人的にはあんまり要らない気がする。
0172デフォルトの名無しさん
2012/07/07(土) 10:21:33.63でもそんなの使わないで済むほうが良い設計であることに疑いはない
expression problemを Haskell の型クラスがどう解決するのかをググって見てみるとよい
0173デフォルトの名無しさん
2012/07/07(土) 10:24:15.30ああHaskellではあとからある型クラスの実装をデータ型に追加できるんでしたっけ。
であれば、Viewクラスを管理するものであとからINavigatable的なものの実装を追加できるのでダウンキャストとかしないでできますか。
けどINavigatable的なものがもしも複数あった場合でViewの派生的なものが無数にある場合、インタフェースをあとから追加するならば必要な人だけ実装すればいいけれど、
代数的データ型や型クラスでのディスパッチの場合は全てに場合分けとか実装を書かなければいけなくて新たな機能追加時やViewの種類の追加時にコーディングする量が増えませんかね?
0174デフォルトの名無しさん
2012/07/07(土) 10:24:26.78そもそも「引数がaで戻り値がbの関数」と「aをbに変換するキャスト」を
区別する必要がない
関数は必要だがアップ関数とかダウン関数などというものは不要
■ このスレッドは過去ログ倉庫に格納されています