関数型プログラミング言語Haskell Part19
レス数が1000を超えています。これ以上書き込みはできません。
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/
0002デフォルトの名無しさん
2012/06/27(水) 10:25:01.40・Introduction to Functional Programming Using Haskell (2nd ed.)
ttp://www.amazon.co.jp/exec/obidos/ASIN/0134843460/
・Haskell: The Craft of Functional Programming
ttp://www.amazon.co.jp/exec/obidos/ASIN/0201342758/
・The Fun of Programming
ttp://www.amazon.co.jp/exec/obidos/ASIN/0333992857/
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
ttp://www.amazon.co.jp/exec/obidos/ASIN/0521644089/
・入門Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/4839919623/
・ふつうのHaskellプログラミング
ttp://item.rakuten.co.jp/book/4052963/
・Programming in Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/0521692695/
・Real World Haskell
ttp://www.amazon.co.jp/exec/obidos/ASIN/0596514980
・関数プログラミングの楽しみ
ttp://www.amazon.co.jp/exec/obidos/ASIN/4274068056
・すごいHaskellたのしく学ぼう!
ttp://www.amazon.co.jp/dp/4274068854
0003デフォルトの名無しさん
2012/06/27(水) 10:28:42.02・GHC Wiki
ttp://hackage.haskell.org/trac/ghc/wiki/TitleIndex
・A History of Haskell
ttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/
・関数型関連の用語集
ttp://sky.zero.ad.jp/~zaa54437/programming/concepts/
・本物のプログラマはHaskellを使う
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend
・Haskell API search Engine
ttp://www.haskell.org/hoogle/
【簡単な使い方】
1.検索バーに関数名を入れて検索
例 map
2.検索バーに型名を入れて検索
例 (a -> b) -> [a] -> [b]
・Real World Haskell
ttp://book.realworldhaskell.org/read/
・Learn You a Haskell for Great Good!
ttp://learnyouahaskell.com/chapters
0004デフォルトの名無しさん
2012/06/27(水) 10:29:12.57すごいHとか(´・ω・`)
なんなの男の子って(´・ω・`)
0005デフォルトの名無しさん
2012/06/27(水) 10:30:18.46・Haskell: The Craft of Functional Programming (3rd ed.)
ttp://www.haskellcraft.com/craft3e/Home.html
ttp://www.amazon.co.jp/dp/0201882957/
・Learn You a Haskell for Great Good!
ttp://learnyouahaskell.com/
ttp://www.amazon.co.jp/dp/1593272839/
0006デフォルトの名無しさん
2012/06/27(水) 13:08:30.500007デフォルトの名無しさん
2012/06/27(水) 13:50:58.03for( const char *s="12345"; *s; ++s ) if( '2'<*s&&*s<'5' ) printf( "%d", (*s-'0')*2 );
■ JavaScript
console.log([1,2,3,4,5].filter(function (i){ return i > 2 && i < 5 ; }).map(function(i){ return 2 * i; }));
■ Python
print(map(lambda x: x*2, filter(lambda x: x>2 and x<5, [1,2,3,4,5])))
■ Ruby
puts [1,2,3,4,5].select{|i| i > 2 and i < 5}.map{|i| i*2}
■ C#
new{}{ 1,2,3,4,5 }.Where(x => 2 < x && x < 5).Select(x => x*2);
■ Common Lisp
(print (loop for x in '(1 2 3 4 5) if (< 2 x 5) collect (* x 2)))
■ Haskell
print [x*2| x <-[1,2,3,4,5], x > 2, x < 5]
0008デフォルトの名無しさん
2012/06/27(水) 14:45:19.680009デフォルトの名無しさん
2012/06/27(水) 19:09:59.42OS9時代にHyper Cardなどでゲームを作成
Mac Games
http://www.glennsgames.com/
Oberin
http://oberin.com/
その他、DSなど様々なゲームを手がけるプログラマ
仕事の片手間でUOライクオンラインゲームを作り出す腕前
オライリー本も出版
ゲーム開発者のためのAI入門 [大型本] ★★★★★ 高評価
David M. Bourg (著), Glenn Seemann (著), 株式会社クイープ (翻訳)
http://www.amazon.co.jp/%E3%82%B2%E3%83%BC%E3%83%A0%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEAI%E5%85%A5%E9%96%80-David-M-Bourg/dp/4873112168
ここまでテンプレ
0010デフォルトの名無しさん
2012/06/27(水) 22:46:13.86print [x * 2 for x in range(1, 5) if 2 < x < 5]
ではないのですか?
0011デフォルトの名無しさん
2012/06/27(水) 22:46:59.61無能なruby厨uyの悪意です
0012デフォルトの名無しさん
2012/06/27(水) 23:02:28.58どうしてpython2なのですか?
0013デフォルトの名無しさん
2012/06/27(水) 23:44:17.19単に自分が未だに2を使ってて、癖が抜けないってだけです
0014デフォルトの名無しさん
2012/06/28(木) 00:43:30.80■ Perl
print map {$_*$_} grep {2<$_ and $_<5} 1..5;
0015デフォルトの名無しさん
2012/06/28(木) 00:55:39.50短く書くことでプログラムが分かりやすくなるから短く書くというのなら理解できるんだけど、
C言語のヤツみたい分かりにくくしてまで短く書く理由って何なの?
算術演算なのに int で定義しない理由を知りたい
0016デフォルトの名無しさん
2012/06/28(木) 01:39:52.96int n = sizeof(x)/sizeof(x[0]); // 配列の要素数
for(i=0; i<n; i++) { if( (x[i]>2) && (x[i]<5) ) printf(" %d", x[i]*2); }
0017デフォルトの名無しさん
2012/06/28(木) 02:57:12.58そもそも>>7はPython2.6だし
0018デフォルトの名無しさん
2012/06/29(金) 00:07:43.08■ Ruby
puts [1,2,3,4,5].select(&(2..5).method(:cover?)).map(&2.method(:*))
0019デフォルトの名無しさん
2012/06/29(金) 00:10:54.810020デフォルトの名無しさん
2012/06/29(金) 00:31:33.120021デフォルトの名無しさん
2012/06/29(金) 02:22:01.14Cはインデント必要ないから、マクロ以外は全部ワンラインにできると思う
0022デフォルトの名無しさん
2012/06/29(金) 02:45:52.41式の美しさを追及しない傾向があるからねー
母数が多くダラダラコードが目に付きやすいってのがあるかもしれんけど
0023デフォルトの名無しさん
2012/06/29(金) 02:50:57.590024デフォルトの名無しさん
2012/06/29(金) 02:56:53.94頭を使わず読めて、一目で正しさを実感できるコードが良いコード
0025デフォルトの名無しさん
2012/06/29(金) 04:42:50.35import Control.DeepSeq
このどちらにもNFData クラスがあり
この両方をインポートするソースファイルをコンパイルしても
コンパイラは両者が同一の物を指すのだと突き止め
曖昧性などないのだと断定する筈です
というのはこの辺のことがリワハの601ページに
> Haskell標準によれば、Haskellの処理系は、
> 複数の名前が同じ「もの」を指していることがわかる能力を持たなければなりません。
との記述があるからです
しかし
Ambiguous occurrence `NFData'
It could refer to either `Cotrol.DeepSeq.NFData',
imported from Control.DeepSeq at Cotrol\Monad\Par\AList.hs:28:1-22
or `Class.NFData',
imported from Control.Monad.Par.Class at Cotrol\Monad\Par\AList.hs:33:1-30
以上はmonad-par-extras-0.3.2 をビルドする途中で出ました
何が起こったのでしょうか?
0026デフォルトの名無しさん
2012/06/29(金) 04:55:36.11deepseq-1.3.0.0 パッケージの Cotrol.DeepSeq モジュールの NFData を
abstract-par-0.3.1 パッケージの Control.Monad.Par.Class モジュールで再エクスポートしているようです
両モジュールを monad-par-extras-0.3.2 の AList.hs が全部インポートしているのですね
0027デフォルトの名無しさん
2012/06/29(金) 07:04:46.00俺はそのようなコードこそ美しく感じる
0029デフォルトの名無しさん
2012/06/29(金) 11:49:54.48コードが美しいってそういう意味じゃないの?
芸術的な意味で美しいなんていってるやつはいないだろ
0030デフォルトの名無しさん
2012/06/29(金) 12:04:40.53というケースが多いのが問題なのです。
0031デフォルトの名無しさん
2012/06/29(金) 12:05:41.210032デフォルトの名無しさん
2012/06/29(金) 12:10:14.710033デフォルトの名無しさん
2012/06/29(金) 12:30:16.660034デフォルトの名無しさん
2012/06/29(金) 12:35:20.43それは誰かが意図的に読みやすくしたり逆に読みにくくしたものではない
0035デフォルトの名無しさん
2012/06/29(金) 20:11:41.090036デフォルトの名無しさん
2012/06/29(金) 20:23:25.560037デフォルトの名無しさん
2012/06/29(金) 20:25:36.84数学ができない奴が、数学者の美意識をバカにしたところで、
そいつがバカなだけ。それと同じ。
0038デフォルトの名無しさん
2012/06/29(金) 20:29:14.290039デフォルトの名無しさん
2012/06/29(金) 20:31:23.10まぁ当時は俺もアレの何が素晴らしいのか全く理解できなかったが。
0040デフォルトの名無しさん
2012/06/29(金) 23:46:48.51理解できないコードなら逆に問題ない
「汚いから作り治せ」でOK
理解はできるが、一瞬「うん?」と引っかかるコードが一番腹が立つ
作った方は毎週1個の日曜パズルのつもりかも知れんが、こっちは毎日数万ステップのレビューしてるんだから、そんなのコードが連続してたら殺意がわく
0041デフォルトの名無しさん
2012/06/29(金) 23:49:03.04数学において式は文の一部でしかない
式の美しさと論理の簡潔さを混同する人間は数学者ではない
0042デフォルトの名無しさん
2012/06/29(金) 23:51:07.980043デフォルトの名無しさん
2012/06/29(金) 23:59:30.34表現が過不足なく内容を表現していてそれ以上は簡潔にできない、という意味なら美しい
0044デフォルトの名無しさん
2012/06/30(土) 00:00:42.16お前のアホっぽいレスも同様の代物と知れ。
0045デフォルトの名無しさん
2012/06/30(土) 00:24:46.610046デフォルトの名無しさん
2012/06/30(土) 01:08:37.58どのくらいすごいかって言うと
PinH三日で挫折した俺がこの本なら一週間で読破できそうなレベル
0047デフォルトの名無しさん
2012/06/30(土) 01:10:14.050048デフォルトの名無しさん
2012/06/30(土) 01:13:27.243週間家にこもってRWHを読破した後だと内容が軽すぎる
0049デフォルトの名無しさん
2012/06/30(土) 01:29:12.76の順序が一番おすすめ
0050デフォルトの名無しさん
2012/06/30(土) 01:36:01.550051デフォルトの名無しさん
2012/06/30(土) 02:02:50.42しかしオーバーフローにビビってるのか、数値計算と行列演算はHaskell入門書では亜流
0052デフォルトの名無しさん
2012/06/30(土) 05:20:21.59これだけは代わりがない
0053デフォルトの名無しさん
2012/06/30(土) 07:11:59.560055デフォルトの名無しさん
2012/06/30(土) 09:26:10.56なぜなのか
0056デフォルトの名無しさん
2012/06/30(土) 12:14:26.25生産性0
何も生み出せない
ゴミクズ
早く死ねよ
プログラミングやってる者同士馴れ合ってるだけじゃねーか
つまんねーから
わかったか?
死ね
まあお前らががんばってもGoogle以下だよね
ゴミクズだな
なんか驚くもの作ってみろよ
レゴとかドラクエ風マップとか
つまんねーやつばっかりだな
モテなさそう
0057デフォルトの名無しさん
2012/06/30(土) 12:27:10.31貧弱な発想にクッソワロタwww
0058デフォルトの名無しさん
2012/06/30(土) 12:49:52.21Rubyスレにお帰りください
Ruby初心者スレにはこなくてもいいです
0059デフォルトの名無しさん
2012/06/30(土) 13:03:53.05なにせライバルがpongのようなデモゲーム、nikki robot(クソゲー)とかlambda cube(ゲームですらない)ぐらいしかいないので
0060デフォルトの名無しさん
2012/06/30(土) 13:06:55.330061デフォルトの名無しさん
2012/06/30(土) 13:14:25.39narioは多分今のghcでは動かない
0062デフォルトの名無しさん
2012/06/30(土) 13:32:21.130063デフォルトの名無しさん
2012/06/30(土) 14:06:40.89あれ、Haskellでマリオやグラディウスなかったっけ
っで?fragみた
別にHaskellでやることじゃねーよなあ?なんなんだ?
結局Haskellで作ってスゲーってのりじゃん?意味がわかんねー
ベスプラティクスってわかる?ゲーム作るのに何でHaskellで作ってるの?w
無理やりHaskellでゲームも作れるみたいにこじつけないでくれよなあwww強引すぎるよなあ?
だからお前はゴミクズなんだよなあw死ねよ シュシュ
>>60 名前:デフォルトの名無しさん[sage] 投稿日:2012/06/30(土) 13:06:55.33
あれ、Haskellでマリオやグラディウスなかったっけ
っで?あったとしてもそんなのほかの言語でてるだろ?
くだらねーwゲームでもゴミクズなHaskellどの言語でもゲームなんて作れるんじゃねーのw
無理やりこじつければなwPerlでゲーム、Rubyでゲームとかw
まじバッカーーーーーーーーーーwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
ゴミクズさんはHaskellやってないでためになることやってくださいよねええwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwきめえんだよなあ?wwwwwwwwwなにがモナドだよなあ?wwwwwwwwwww
しねぇwwwwwwwwwしねっ
>>59 名前:デフォルトの名無しさん[sage] 投稿日:2012/06/30(土) 13:03:53.05
今ならminecraftクラシックもどき作るだけでも大絶賛されると思うのでやれる人は是非やって欲しい
なにせライバルがpongのようなデモゲーム、nikki robot(クソゲー)とかlambda cube(ゲームですらない)ぐらいしかいないので
たしかになあwwwwwwwww
プライドがあるんだろうなwww
真似したらいけないっていう日本のプライドがなあwww
それか開発する技術力がねーだけだろうなあwwww
0064デフォルトの名無しさん
2012/06/30(土) 14:09:55.65むしろ、DSLとしてHaskellでゲーム作って、実装を他言語にトランスレートするのが通だと思う
0065デフォルトの名無しさん
2012/06/30(土) 14:22:27.05> ベスプラティクス
ベストプラクティスって言いたかったんですね。わかります
ちなみに漏れがレスしたのは>>59であって>>56ではありません
0066デフォルトの名無しさん
2012/06/30(土) 14:24:23.41見当違いの意見を書くスレですか?
0067デフォルトの名無しさん
2012/06/30(土) 15:37:16.750068デフォルトの名無しさん
2012/06/30(土) 18:21:23.69なあ?
Haskellとかしょべーんだよ
セキュリティ系のハッカーみたいにかっこよくて凄いわけじゃない
クラッカーみたいに悪ぶってもない
なんかゲーム作るやつとか凄いソフト作るやつみたいに
驚きも与えてくれない
お前らは何も生み出せないゴミ
ただの言語学者
ゴミ
0069デフォルトの名無しさん
2012/06/30(土) 18:34:30.23Singletonもc++のライブラリであるBoost.Fusionが10年以上前に歩いた道だし
実用を捨てた研究用言語としても遅れてる感が否めないよね
0070デフォルトの名無しさん
2012/06/30(土) 18:45:24.360071デフォルトの名無しさん
2012/06/30(土) 19:04:03.72> 別にHaskellでやることじゃねーよなあ?なんなんだ?
まさにそれが楽しいんだよ。
「それまでの普通」ではない事に挑戦するのが面白い。
また frag なんかは、 FRP が研究からゲームという結果へ結びついたという面でもあり、
素晴らしいことなんだよ。
0072デフォルトの名無しさん
2012/06/30(土) 19:38:14.42車輪の再発明乙wwなにがしたんですかねww
あなたたちの目的はなんですかねえwww
ないんですかねえ?w
何がしたいのかさっぱりですよww
ええww
0073デフォルトの名無しさん
2012/06/30(土) 19:51:32.40ということだな
おk把握
0074デフォルトの名無しさん
2012/06/30(土) 19:55:47.35静的型付けが役に立たないことを確認するという目的もある
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に変換するキャスト」を
区別する必要がない
関数は必要だがアップ関数とかダウン関数などというものは不要
0175デフォルトの名無しさん
2012/07/07(土) 10:27:10.58でUIのフレームワーク側はViewに対してINavigatableとかあとから色々機能拡張をする可能性がある。
ユーザー側はあくまでもView派生であればUIフレームワークに組み込めるけれど拡張のインターフェースを実装しているならば、それに即した動作ができる。
0176デフォルトの名無しさん
2012/07/07(土) 10:29:19.80自分が質問したいのは>>175のような場合のシチュエーションでいろんなViewがすでに色々作られてる中、別の拡張属性を追加したい場合。
その関数の例で言えば、すべてのViewの実装に新たな拡張属性についての関数を追加しなければとなりませんか?
0177デフォルトの名無しさん
2012/07/07(土) 10:36:25.63デフォルト実装があれば良いだけじゃない?
0178デフォルトの名無しさん
2012/07/07(土) 10:40:01.950179デフォルトの名無しさん
2012/07/07(土) 10:40:28.56IUnknownとかを拡張するより最初から作り直した方が早いってのがC#の本音
0180デフォルトの名無しさん
2012/07/07(土) 10:48:06.74その一つとして、コードがそこら中分岐だらけになって拡張が難しくなる、ってのがあるじゃん。
代数的データ型もその点全く同様なのに、パラメータ多相と高階関数が組み合わさると、
あれだけの一般性が得られる、てのはちょっと驚きだった。
コンピュータサイエンス舐めたらイカンと思ったね。
0181デフォルトの名無しさん
2012/07/07(土) 10:48:53.01既存の View に追加でuser-definedなデータを持たせるうまい(型安全な)やり方はあるか、
という質問であると理解した。
0182デフォルトの名無しさん
2012/07/07(土) 11:21:00.58Attr (Window a) (Maybe INavigatable)
というAttrを作ってやれば実現できそう。 で、INavigatableには何か色々持たせる。
問題はどうやって そのAttrを作るかだけども、方法は分からなかった。
http://hackage.haskell.org/packages/archive/wx/0.12.1.6/doc/html/Graphics-UI-WX-Attributes.html
あるいはwx-coreに手を入れる必要があるかもしれない。
多態性カッコイイ!任意の型を扱えるのカッコイイ!
ってなるのはわかるけど、そんな機能は無くてもやりたい事を実現できるかもよ、と言いたい。
0183デフォルトの名無しさん
2012/07/07(土) 12:46:36.80DCI (Data Context Interaction)
とか当たってみた方がよろしんじゃないかしら
0184デフォルトの名無しさん
2012/07/07(土) 16:15:12.31setCallBack :: (View -> IO ()) -> IO () みたいな関数にView -> IO () な関数を渡さないといけないし、
またViewの定義もいじれない、っていうような状況を>>161は想定しているんだと思う。
そういう場合、フレームワーク側で、View じゃなくってView a みたいな型と、
userData :: View a -> a みたいな関数を用意しておくことにするのが簡単な解決かな。
wxHaskellは知らんけど、>>182の説明しているのも、そういう方向性の解決だと思う。
0185デフォルトの名無しさん
2012/07/07(土) 18:54:53.76lookup :: HashTable View INavigatable -> View -> IO (Maybe INavigatable)
0186デフォルトの名無しさん
2012/07/07(土) 19:07:25.760187デフォルトの名無しさん
2012/07/07(土) 19:49:11.27どうしてなの?
0188デフォルトの名無しさん
2012/07/08(日) 02:54:54.20永続データ構造使った方がいいんじゃないかな
0189デフォルトの名無しさん
2012/07/08(日) 08:39:37.660190デフォルトの名無しさん
2012/07/08(日) 08:55:08.51すまん、もう少し詳しく。
今回の件でなぜ永続データ構造の方が望ましいのか。
永続データ構造に比べて HashTable だと不利なるケースは何か。
という辺りを。
俺には今回の件で、永続データ構造でも HashTable 使っても、
プログラムの見やすさや効率の点で大して変わらないように思える。
というのも、>>181 の意図であるなら、
永続データ構造を使ってもその値は結局 IO モナドを被せた方が、
プログラムがスッキリするような気がするのだが。
0191デフォルトの名無しさん
2012/07/08(日) 09:14:23.10wxFruitみたくFRPっぽく宣言的にするならともかく
0192デフォルトの名無しさん
2012/07/08(日) 09:14:49.61http://www.haskell.org/pipermail/cvs-libraries/2012-June/015725.html
0193デフォルトの名無しさん
2012/07/08(日) 09:20:44.92一番親の(C++)クラス EvtHandler は Haskell の EvtHandler a という型で表し
その子クラス Window は EvtHandler (Window a),
さらにその子クラス Frameは EvtHandler (Window (Frame a)) というように
パラメタ多相でうまく(?)エンコードしている
ただ、既存のwxWidgetクラスをHaskellでどうやって継承するのか謎
0194デフォルトの名無しさん
2012/07/08(日) 09:33:50.120195デフォルトの名無しさん
2012/07/08(日) 11:39:58.99http://hackage.haskell.org/package/hashtables/
0196デフォルトの名無しさん
2012/07/08(日) 15:40:24.88どんな扱いを受けてるの?
0197デフォルトの名無しさん
2012/07/08(日) 22:29:03.760198176
2012/07/09(月) 00:43:57.30自分的には>>177で言われてるデフォルト実装があればコード量の増大はなくなるかなーと納得。
>>181
ちょっとHaskellまだ勉強したてなので結論としてそういうふうに落ち着くのかちょっとわからず。
C++やC#でViewクラスを継承した色々なクラスで、View自体の実装とは関係のない別の性質を持たせたい場合、型クラスを使った時にコードが膨らまないかという意味。余計わかりにくいかもですが。
一つの方法として>>181のような外部から属性を追加するという方法でも実現は出来ると思います。
>>193のやり方を具体的に理解してないですが、自分のイメージに近そうな予感。
いずれにしてもC++/C#的なやり方でなくて、他にうまいやり方がありそうな気が。精進してきます(´・ω・`)
0199デフォルトの名無しさん
2012/07/09(月) 01:20:52.64ロジックとViewを上手に分離したら、Viewの部分は仕様だけ用意すればあとは自動でhsコード出力できないのだろうか
上級者はやってるんだろうな…
0200デフォルトの名無しさん
2012/07/09(月) 11:18:53.32&gt; ⇔ >
0201デフォルトの名無しさん
2012/07/09(月) 20:03:56.840202デフォルトの名無しさん
2012/07/09(月) 22:24:54.080203デフォルトの名無しさん
2012/07/09(月) 22:44:04.410204デフォルトの名無しさん
2012/07/09(月) 23:05:22.23ごっちゃになってわけわからん
0205デフォルトの名無しさん
2012/07/09(月) 23:09:32.93それ以外が型クラス
0206デフォルトの名無しさん
2012/07/09(月) 23:11:13.110207デフォルトの名無しさん
2012/07/09(月) 23:23:54.84たしかに、わけわからなくなりそうな疑問だな。
不純な計算を形式化/モデル化できることがモナドという代数的構造の利点で、
実装の異なるデータの集合を代数的構造の面で抽象化・一般化してプログラミングできることが型クラスの利点で、
両者あわさって、実装/意味の異なる不純な計算を抽象化・一般化してプログラミングできることが
モナドという型クラスが存在する利点、といってみるテスト
0208デフォルトの名無しさん
2012/07/09(月) 23:25:36.010209デフォルトの名無しさん
2012/07/10(火) 00:06:37.860210デフォルトの名無しさん
2012/07/10(火) 00:35:06.790211デフォルトの名無しさん
2012/07/10(火) 01:04:20.52着眼点がぜんぜん違うから、比較すること自体が困難だな。
例えるなら、ハローワークに行こうと決意するのを先延ばしにするのが簡約の遅延で、決意したけどなかなか行かないのが実行の遅延。
0212デフォルトの名無しさん
2012/07/10(火) 01:30:08.39しかもモナドが必要十分の構造というわけでもない
0213デフォルトの名無しさん
2012/07/10(火) 01:58:22.49簡約は式を評価する時になされることだから、式の値が要求されるまで簡約は遅延される
IOも、その結果が要求されるまで遅延される
どちらも遅延評価の結果 と考えています
0214デフォルトの名無しさん
2012/07/10(火) 08:32:24.44ダウト
0215デフォルトの名無しさん
2012/07/10(火) 08:58:05.68ツボにはまったw
0216デフォルトの名無しさん
2012/07/10(火) 11:59:56.17それがIOもサンクなんだよな、、、
0217デフォルトの名無しさん
2012/07/10(火) 12:02:54.970218デフォルトの名無しさん
2012/07/10(火) 22:11:47.43重要なだけであって、モナドは関係ない。
計算(computation)もHaskellでは特筆する話ではない。なぜなら計算概念が
一体何のことなのか、いまのところ固まってないため。
モナドの利点は入出力、リスト、継続、環境、状態、例外処理などをそれぞれ
”切り分けることができるようになる”というところだ。
書くコード書くコード全部スパゲッティ化するプログラマでも、モナドの枠組みに合わせるように
コードが書ければ、あら不思議、ちゃんと機能毎に切り分けられます、という理論。
そもそも疑念に思うべきところは、例えばリストモナドはリストのみで完結していて、他のMaybeモナド
には一切影響がないというところだった。これは、よく考えると驚くべきことだ。
0219デフォルトの名無しさん
2012/07/10(火) 22:13:05.49じゃなくて
他のMaybeモナド等には
で。
0220デフォルトの名無しさん
2012/07/10(火) 22:29:29.280221デフォルトの名無しさん
2012/07/10(火) 22:30:56.350222デフォルトの名無しさん
2012/07/10(火) 22:31:18.500223デフォルトの名無しさん
2012/07/10(火) 22:45:04.56とりあえず種本は下記なので、疑わしいならば読め。
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.2885
0224デフォルトの名無しさん
2012/07/10(火) 23:24:08.47この論文の名前はSemanticLego(意味論的レゴ)という名前で
内容は、表示的意味論は理論としては強力だけれど、実際プログラミング言語を
実装しようと思うと、拡張性が悪すぎてちょっと機能を追加しようと思うと
いままでのコードをかなり書き換える必要があってすごい実用性が低い
ということをSchemeの実例コードを使って示していく。
そののち、モナドという枠組みを使って言語を組むと、拡張性も良くて
意味論的組合せもレゴのように自在に可能であることが示される。
0225デフォルトの名無しさん
2012/07/10(火) 23:25:09.930226デフォルトの名無しさん
2012/07/10(火) 23:56:09.39>218の
> モナドの利点は入出力、リスト、継続、環境、状態、例外処理などをそれぞれ
> ”切り分けることができるようになる”というところだ。
> 書くコード書くコード全部スパゲッティ化するプログラマでも、モナドの枠組みに合わせるように
> コードが書ければ、あら不思議、ちゃんと機能毎に切り分けられます、という理論。
の意味はさっぱりわからない。
0227デフォルトの名無しさん
2012/07/11(水) 00:40:05.13こちらが正しい投稿先です。
----
>>226
そう突っ込まれるとうまく返せん。しばし待て。
とりあえず意図としては、
1行目は個々の機能毎にモジュール化できるということを言っているつもり
2行目は機能毎にモジュール化できるということが具体的にどういうことか
言おうと思って出した例。そんなことができるかはわからない。
とりあえず、自分はこのように理解していて、説明しようとするとこういう風になる。
226が説明しようとするとどうなる?
0228デフォルトの名無しさん
2012/07/11(水) 00:43:48.44なんか異和感がある
0229デフォルトの名無しさん
2012/07/11(水) 09:02:56.52mtlの道場的サイトを紹介してください
実例豊富なのがいいです^O^
0230デフォルトの名無しさん
2012/07/11(水) 09:16:33.33モナドの利点って、今までとは違った観点で切り分けられることだと思うんだけど、うまく説明できない
0231デフォルトの名無しさん
2012/07/11(水) 09:38:59.720232デフォルトの名無しさん
2012/07/11(水) 11:31:29.200233デフォルトの名無しさん
2012/07/11(水) 11:41:44.22ファンクターは普通の関数を文脈持った値に適用する。
アプリカティブは文脈持った値?に文脈持った値を適用する。
モナドは文脈持った処理をくっつける。
0234デフォルトの名無しさん
2012/07/11(水) 12:30:54.84忘れていい事と忘れてはならない事を見分ける方法はあるだろうか。
0235デフォルトの名無しさん
2012/07/11(水) 12:34:18.32忘れていい事とは何かをちゃんと定義できれば集合は分割できる。
だから見分ける方法はちゃんと定義する事だ。
0236デフォルトの名無しさん
2012/07/11(水) 20:16:31.490237デフォルトの名無しさん
2012/07/11(水) 21:27:45.79一次元で言うと、
元データ [x0, x1, x2, x3, x4]
カーネル [k0, k1, k2]
演算 [x0*k0 + x1*k1 + x2*k2, x1*k0 + x2*k1 + x3*k2, x2*k0 + x3*k1 + x4*k2]
こんな感じの演算です。
今は traverse2 関数を使い、いちいち各配列のインデックスを指定して計算していますが、
他にも方法はあるのでしょうか。
0238237
2012/07/11(水) 21:30:03.63他にもっと効率のいい方法はあるのか、という質問です。
0239デフォルトの名無しさん
2012/07/13(金) 22:21:32.07一体何でそんな話になる?
分割できて自由に組み合わせできるという以上の話なんてないはずだ。
そもそも計算理論のモナドとはなんのことを指すのか答えろ。
>>234
じゃあお前が総括しろ。
0240デフォルトの名無しさん
2012/07/14(土) 00:51:44.58そもそもと言ってるのだから、改めてより深いテーマを提起しているのでは?
計算理論のモナドとは何かというのは、私もぜひ聞きたいです。
おそらく圏論のモナドの事を言っていて、
これと Haskell で利用されているモナドとの間の相違点が気になる、
という話ではないかと思うのですが、違いますか?
私には、>>239 がなんで命令形なのかよく分らない。
無駄に波風の原因を作らず、もっと普通に訊けばいいと思うんだけど。
0241デフォルトの名無しさん
2012/07/14(土) 06:48:22.160242デフォルトの名無しさん
2012/07/14(土) 06:50:15.150243デフォルトの名無しさん
2012/07/14(土) 08:51:48.200244デフォルトの名無しさん
2012/07/14(土) 10:30:52.62instance Monad Foo where ・・・で名前空間をインプットすると
Monad a => の型をもつ全ての名前がアウトプットされる
ただし、Haskellで演算子オーバーロードを多用するためには名前空間を明示したくない
そこで型推論を改造して名前空間も省略できるようにしたのが型クラスだ
0245デフォルトの名無しさん
2012/07/14(土) 10:37:20.23”切り分けることができるようになる”というのは名前空間のことを言ってるだけだと思う
0246デフォルトの名無しさん
2012/07/14(土) 11:33:45.51computation ADTはmonadとmonad transformer使って切り分けられるからpolymorphicにできると書いてあるよ
型クラスは使い易くするだけ
0247デフォルトの名無しさん
2012/07/14(土) 13:16:29.92SemanticLegoではmake-computationsを使ってcomputation ADTの構築を手動で書くが
Haskellは型クラスの仕組みを使って自動的にやらせることができるから便利
ということだろう
0248デフォルトの名無しさん
2012/07/14(土) 20:55:40.42私は今のところ生憎 CUDA 環境がないので、ネット上の CUDA に関する情報や
サンプルコードなどを見て想像するしかないのですが・・・
[1] 全体の使用感はどんな感じなのでしょうか。
処理の速さは感じられますか。
[2] プログラマは CUDA のメモリなどの仕組みは全く、
あるいはほとんど意識する必要が無いのでしょうか。
[3] 実行ファイルにコンパイルしないと CUDA は働かないのでしょうか。
それとも ghci 上でも、Haskell のデフォルトのリストや配列よりも速いでしょうか。
特に [2] の質問でよい応えが得られれば、
ワークステーションクラスのノートPCをひとつ買ってみようと思います。
0249デフォルトの名無しさん
2012/07/15(日) 00:59:34.76MLのファンクタならそういえなくもないけど
0250デフォルトの名無しさん
2012/07/15(日) 01:10:01.92そういうのを今更じっくり読むくらいならもっとMonadTransなコード書いた方がいいんでないの??
0251デフォルトの名無しさん
2012/07/15(日) 03:09:19.01一通り探したけど,どれもc辺りへのbindingで剛体の位置得るだけなのにIO必須で好きじゃない
haskellってこういうのに得意なイメージあったんだがなあ
関数型だと遅くて現実的じゃないのだろうか
0252デフォルトの名無しさん
2012/07/15(日) 07:42:18.120253デフォルトの名無しさん
2012/07/15(日) 08:00:53.85型には物理的実体がない
どちらかと言えば、想定外の型を受け取りたくないという精神的なものを表現するのが得意
0254デフォルトの名無しさん
2012/07/15(日) 11:51:37.81型が精神的ってのも激しく謎だが
0255デフォルトの名無しさん
2012/07/15(日) 12:11:20.25低レイヤーのエンジンに、合成して突っ込む形のものは向いてるかもしれないね。
0256デフォルトの名無しさん
2012/07/15(日) 12:49:38.110257デフォルトの名無しさん
2012/07/15(日) 12:52:25.71> haskellってこういうのに得意なイメージあったんだがなあ
どこからそんなイメージが湧いてくるの?
自分で物理演算をちょっと試してみて
「お、結構いけそうかも」って思えたの?
0258デフォルトの名無しさん
2012/07/15(日) 13:23:51.38関数型言語の集合は、国境や法律のように時々変わる
0259デフォルトの名無しさん
2012/07/15(日) 14:15:14.70OpenGLとかもそうだけど、最近の物理演算エンジンはロジックがステートマシンであることを前面に出してるから
その宣伝を鵜呑みにすれば、Haskellが得意なはず
0260デフォルトの名無しさん
2012/07/15(日) 14:34:39.22話をぶった切って悪いが、丁度よい機会だから訊いてみたい。
Haskell でステートマシンを組む際のよい見本となる解説を教えてほしい。
ネットも書籍も探してみたが、なかなか見当たらない。
ゲームを作ろうと思ってる。
ステージ切り替え、場面切り替えなどでステートマシンを使うと良さそうだが、
どうにも手続き型っぽくなってしまう。
状態を保存したりするのに、どうしても IORef に頼ってしまうんだ。
0261デフォルトの名無しさん
2012/07/15(日) 17:43:44.110262デフォルトの名無しさん
2012/07/15(日) 19:56:03.09自分のゲームの今のコードは複雑で長く、何より汚いから晒すのは正直恥ずかしい。
だから晒すのは、手続きっぽくて嫌だなぁと思うエッセンスの部分だけね。
簡単に言えば、[タイトル画面シーン] や [オプション画面シーン] などシーン毎に関数を作ってる。
この関数は、戻り値として「次のシーン」を返すようになっていて、
シーン内でプレイヤーが行った行動などによって次のシーンを決定する。
newtype SceneProc = SP (Time -> GamePad -> (ScreenDesc, SceneProc))
titleScene :: GameData -> SceneProc
titleScene gd = SP $ \t gp ->
let scr = makeScreenDesc -- 画面を構成する指示書を作る
in case 時間やゲームパッドなどの状態 of
オプション画面へ遷移するなら -> (scr, optionScene gd)
とくに何もしていないなら -> (scr, titleScene gd)
optionScene, playScene, gameOverScene・・・ :: GameData -> SceneProc
mainLoop :: SceneProc -> SceneProc
mainLoop (SP scene) = do
(t, gp) <- 現在時間とゲームパッドの状態
let (scr, next) = scene t gp
disp scr -- 画面表示
mainLoop next
(実際は GameData 型の中で IORef を多用してる。その方が記述がスッキリするから)
で問題は、こういう作りだと、titleScene などの各シーン関数で、
やたら if や case of で場合分けする羽目になるということ。
A なら B、C なら D、A でかつ B なら E などの記述が並んで、
ハッキリ言って、関数型特有の宣言的な記述からはほど遠く見える。
0263デフォルトの名無しさん
2012/07/15(日) 19:58:59.40でも雰囲気は分ってもらえると思う。
0264248
2012/07/15(日) 20:23:42.91使ってみた方はいるでしょうか。
パフォーマンスはどれほど出るものなのでしょうか。
このパッケージの github にあるサンプルコードを見てみると、
こちらは自分で OpenCL のコードを書かなければならないみたいですが、
DSL タイプの支援ライブラリは無いのでしょうか。
0265デフォルトの名無しさん
2012/07/15(日) 21:37:54.99いろいろ試しているけど、
あなたが今使っているコードがどういうものか分からないので、
比較ができないぁ
あなたがいま実際に取り組んでいる実際の問題でなくても構わないので、
高速化をしたら比較できるような対象となるお題コードを、
http://ideone.com/ とかにアップしてURIを張り付けてよ
0266デフォルトの名無しさん
2012/07/15(日) 22:21:35.02monadiusの作り方
0267237
2012/07/15(日) 23:00:10.71http://ideone.com/l7Ina に私のコードを貼り付けました。
そのまま ghci でロードして頂ければサンプルデータで実行できます。
任意長の元データ b とカーネルデータ k (|b| >= |k|)に対して、
>>237 のような演算を行う関数 calc を定義しています。
このコードの (\i -> kp (Z:.i) * bp (Z:.ic+i)) の辺りが何とも間の抜けた感じです。
配列に対してインデックスで要素単体を指定して演算しているのが、
なんていうか Haskell らしくないというか、気持ちが落ち着かないというか・・・
traverse 系関数ではこういうインデックス指定に対して特に最適化して作られていて、
この方法が最も効率がいいというのなら仕方ありませんが、
もっと効率よくて見やすいコードになるのなら嬉しいです。
ちなみに >>237 のような演算は、同じカーネルを対角線に階段状に並べたN重対角行列と、
元データのベクトルとの積の演算なので、hmatrix でやった方が速いかも知れませんね。
明日 hmatrix を入れて実検してみます。
0268デフォルトの名無しさん
2012/07/16(月) 00:55:59.93http://ideone.com/e6PGR
sumP と *^ を使ってみた。
kernelのsizeを約100、baseのsizeを約10000にして
ベンチマークフレームワーク ceriterion を使って測定してみたら、
15万倍くらいはやくなってる。39.45803 msから256.1315 nsヘ。
・・・マジで?
我ながら信じられないので、 ceriterion の使い方間違っているような気がする。
nsはナノ秒だよね? よね?
0269デフォルトの名無しさん
2012/07/16(月) 01:40:46.31SceneProcはステートマシンとしては普通の定義だと思う。
>やたら if や case of で場合分けする羽目になるということ。
そういう風に定義する計算モデルなのだから致し方ない。
ステートマシンを状態遷移表で書き下したとき、
・titleSceneやoptionScene等の関数が「状態」
・パターンやガードが「入力」
・その右辺式の値が「出力と遷移」 (ScreenDesc, SceneProc)
に対応していて、ミーリー型オートマトンを定義してる、と考えるといいと思う。
Monadiusの定義だとムーア型かな。
シーンを関数として作る、というのは方向性として間違ってないんじゃないかな。
各シーンの内部状態をさらにどうしてるかが問題だけど。
IORefを多用している事と、ステートマシンが分岐だらけであることとはあまり関連性がない気がする。
とりあえずステートマシンの参考になりそうな、有名所を適当に上げると、、
SceneProcの定義はYampaの定義が一番近いと思う。Netwireも確かこんなん。
これらの単純なモデルは、arrowsパッケージのAutomaton i o。(関数型プログラミングの楽しみ10章の単純オートマトン)
変種としては、
SceneProc r
= SP (Time -> GamePad -> (ScreenDesc, SceneProc r))
| Done r
と、Done rを付け加えるとモナドにできて、コルーチンみたいな中断/再開が可能になる。(Done rは受理状態に相当。)
Enumeratorとか、Conduit、Pipes、もこのタイプ。
これらをさらに抽象化したのがmonad-coroutineで、コイツは実はMonadFreeというものに解りやすい名前を付けただけ、
とか色々奥の深い世界があったりする。
MonadFreeの別の応用としてOperationalモナドというのもあったり…。(自動モナド化とか、インタプリタとか興味深かった)
0270デフォルトの名無しさん
2012/07/16(月) 02:15:42.25演算の中に畳み込みが入ってるなら、配列要素数に比例する以上の速度変化が出てもそれほど不思議じゃない
ただ、ghci環境でやってるなら速度計測はまったくアテにならない
exeファイルを作って計測すべき
0271デフォルトの名無しさん
2012/07/16(月) 04:49:51.07言葉を選んで口数少なく
あ、うん……
0272デフォルトの名無しさん
2012/07/16(月) 04:51:59.44アプリケイティヴって読んでた……:(;゙゚'ω゚'):
0273デフォルトの名無しさん
2012/07/16(月) 06:51:33.61ちょっとした間違いを見つけると厳しく指摘する神経質な理系女子…
ナンカイヤダ
0274デフォルトの名無しさん
2012/07/16(月) 07:43:11.050275デフォルトの名無しさん
2012/07/16(月) 08:02:09.32完全に同じイメージだった…
物静かだけど非常に厳しい
0276デフォルトの名無しさん
2012/07/16(月) 18:23:56.330277262
2012/07/16(月) 18:54:36.66この方向で洗練させていくには、結局俺は何を勉強してみるのがいいんだ?
ミーリー型オートマトンがどういったものか調べてみればいいのかな。
それとも、Yampa や Netwire や Automaton i o の中身を調べてみればいいのかな。
変種としては・・・以降の話は、基礎を学んだその後の話だよな、きっと。
0278237
2012/07/16(月) 19:48:07.97コンパイルして試してみたところ、calc1 の方の結果が、
ideone_e6PGR.exe: .\Data\Vector\Generic.hs:244 ((!)):
index out of bounds (-2147483648,100000)
ideone_e6PGR.exe: thread blocked indefinitely in an MVar operation
と表示されたのですが、何か問題あるでしょうか。
こちらの環境は、下記の通りです。
Intel Core2 Duo 2.4GHz メモリ 2GB
Windows7
ghc 7.4.1 (repa-3.2.1.1 criterion-0.6.0.1)
0279デフォルトの名無しさん
2012/07/17(火) 01:32:45.61ありがとう。
確かに、Windows 7環境だと、こっちでも同じエラーが出る。
というわけで、criterion周りを多少変えて、かつ新しい関数calc2を加えたコード
http://ideone.com/hdl0v
これだと、Windows 7だとcalc1はcalc0よりも遅い。
しかし、calc2はcalc0よりも数%だが速い。
別PCのUbuntuだと、calc2 > calc1 > calc0で速い。
しかも、calc2はcalc0の2倍くらい速い。
15万倍も速くなるなんていうのはおかしいから、前回の結果は測定方法に問題があったのだと思う
なお、ソフトのバージョンは両方とも
GHC 7.4.1
repa 3.1.0.1
criterion 0.6.0.1
0280デフォルトの名無しさん
2012/07/17(火) 01:34:14.90コンパイルするときに実行時のメモリ量を指定できるから、メモリを増加して実行しても同じメッセージが出るなら配列の添字指定でミスってる
メモリ増やしてエラーの配列のboundsの数字が変わるなら、メモリが足りなかったか、MVarでミスってる
0281デフォルトの名無しさん
2012/07/17(火) 01:47:31.39場合分けの嵐になるのはそういう状態マシンである以上仕方ないと思うけど、
IORefを多用しているというのが非常に気になる。
察するに、例えば、ゲームの自機や敵が動いているアクション画面(と呼ぼう)から
装備変更画面だとかコンフェグ画面だとかに遷移したあと、またアクション画面に戻ったとき、
自機や敵の位置など前回のアクション場面のパラメータが保存されてなければならないが、
それを装備変更画面だとかコンフェグ画面だとかの間中保持して受け渡し続けるのがうざい、
ということなんだろうか?
0282デフォルトの名無しさん
2012/07/17(火) 01:58:11.92IORefを避けるなら、ゲームのどの環境遷移も二分岐以下の合成で表現できるという制約をゲームの仕様にくっつけるべきではなかろうか
0283237
2012/07/17(火) 19:38:27.61試したところ、ちゃんとテストできました。
こちらでも同じ傾向が出ました。
calc1 は遅いですが、calc0 と calc2 がほぼ同じ速度です。
何回かテストすると 0 と 2 で順位が入れ替わることもあり、
差はたぶん誤差の範囲で済まされるレベルだと思います。
ただ、気になる点がひとつ。
defaultMain 関数でテストする関数をリストしていますが、
calc0 1 2 のテスト順をどう入れ替えても、最初にテストするものだけ、
かならず異常値によって発生した分散が 50% を越えます(80%いく時も)。
何なんでしょうかね。
あと、せっかくなんで RTS の -hc オプションを付けて
使用メモリの量や傾向も測ってみました。
こちらのテストでは、calc0 に対して calc1 と calc2 は
使用メモリ量が 10 倍高かったでかす。
と言っても、kernel=[1..100]、base=[1..10000] で 1 サイクルを計測して、
calc0 で 14kByte 強程度なので、たかが知れてますが。
そして、当然と言えば当然ですが、メモリ使用の傾向は
calc0 では綺麗な三角形に、calc1 や calc2 では台形になりました。
速度、メモリ双方のテストで少し意外(期待はずれ)な結果になりました。
このような1次元や2次元の畳み込み演算は応用も広く需要ありそうですが、
もっと綺麗に書ける専用関数をライブラリに入れてほしいものです。
今回は大変勉強にになりました。ありがとうございました。
0284デフォルトの名無しさん
2012/07/18(水) 08:26:34.33なんだ老婆か
0285デフォルトの名無しさん
2012/07/19(木) 13:35:25.39"you must not close the Handle until you have finished consuming its results <<via>> hGetContens.
Doing so would cause you to miss on some or all of the file's data."
とんだ落とし穴じゃないか。。。
0286デフォルトの名無しさん
2012/07/19(木) 13:42:02.590287デフォルトの名無しさん
2012/07/19(木) 14:09:02.87Lazy IO()の代わりにこれらを用いたRWHに相当する本が待たれるところ
0288デフォルトの名無しさん
2012/07/19(木) 15:26:55.330289デフォルトの名無しさん
2012/07/19(木) 19:32:40.39どういうコード書いたらこんな事態に遭遇するの?
0290デフォルトの名無しさん
2012/07/19(木) 21:19:09.81とか
0291デフォルトの名無しさん
2012/07/19(木) 22:50:12.66大量のファイルからデータを読み込んでデータベースに叩き込む処理を書いたときに、
OSのファイルディスクリプタの数の制限に引っかかって、ファイルを閉じる処理を入れたら、
これではまった。
まぁ、これも、ファイルを閉じる処理をデータを入れる処理の後に書けばすむ話だったわけで、
知っていれば容易に避けられる問題ではある。
0292デフォルトの名無しさん
2012/07/20(金) 01:45:59.810293デフォルトの名無しさん
2012/07/20(金) 11:20:14.00はあ
0294デフォルトの名無しさん
2012/07/20(金) 11:22:34.220295デフォルトの名無しさん
2012/07/20(金) 15:14:51.490296デフォルトの名無しさん
2012/07/20(金) 23:05:22.410297デフォルトの名無しさん
2012/07/21(土) 01:17:00.83型クラスをreifyしてもfamilyDなんかは見当たらないのに、
(その型クラス内での)型族をreifyすると普通に型クラスの型変数を共有してたりして、どう書いたら良いのか分からんのです
0298297
2012/07/21(土) 01:34:57.57お騒がせしてすいません
0299デフォルトの名無しさん
2012/07/22(日) 16:06:44.03ようわからんけど
無限リストの扱いみたいに、必要な分だけもらって後は知りませんよ的コードじゃなくて、
全部使う事を前提とした書き方の時は心配しなくていいってこと?
0300デフォルトの名無しさん
2012/07/22(日) 16:11:11.73遅延 IO に限らない話だが、
リソース(ハンドラ)を解放する前に、必要な分のデータを消費するなら、問題ない。
遅延 IO だと、必要な分のデータを消費する前にリソースが解放されてしまう可能性に、
ソースをぱっと見た限りではなかなか気づかない可能性が低くないことが問題。
0301デフォルトの名無しさん
2012/07/22(日) 16:24:37.280302デフォルトの名無しさん
2012/07/22(日) 16:51:24.81遅延 IO に関する問題で、>>300 に示したものについては、
hGetContents 関数や getContents 関数を使用した場合に多く見られる。
遅延 IO に関する問題は逆に、データが完全に消費する(読まれる、かな)まで
リソースが解放されない、という問題もある。
こちらは、readFile 関数などでよく見られる。
これらはあくまで私が自分でよく体験した問題です。
他にもあるかも知れません。
0303デフォルトの名無しさん
2012/07/22(日) 17:48:07.53引用元は↓のサンプルコード"ch07/toupper-lazy2.hs"のすぐ後にあるwarningですよ。
ttp://book.realworldhaskell.org/read/io.html
読者のコメントも付いてますね。
0304デフォルトの名無しさん
2012/07/23(月) 02:19:06.200305デフォルトの名無しさん
2012/07/23(月) 07:07:34.51俺はEmacsで十分だけど
0306デフォルトの名無しさん
2012/07/23(月) 08:14:53.53leksahも使ってみたけど結局Vimに落ち着いた
0307デフォルトの名無しさん
2012/07/23(月) 11:06:49.190308デフォルトの名無しさん
2012/07/23(月) 20:30:36.420309デフォルトの名無しさん
2012/07/23(月) 20:43:41.820310デフォルトの名無しさん
2012/07/23(月) 21:05:08.540311デフォルトの名無しさん
2012/07/23(月) 21:30:42.94fmapってなんなのか謎です。助けてくださいお願いします。
0312デフォルトの名無しさん
2012/07/23(月) 21:34:08.600313デフォルトの名無しさん
2012/07/23(月) 21:57:08.56動作よくわかりません。fmapってmapと何が違うの?
0314デフォルトの名無しさん
2012/07/23(月) 21:59:40.470315デフォルトの名無しさん
2012/07/23(月) 22:41:05.39入れ物っぽい動きをするデータ型の中身に関数を作用させるのがfmap
で、リストのfmapに特にmapと名前がついてるだけ
ていうかH本にそんな感じで書いてあったはずだが…
0316デフォルトの名無しさん
2012/07/23(月) 22:42:02.100317デフォルトの名無しさん
2012/07/23(月) 22:45:56.020318デフォルトの名無しさん
2012/07/23(月) 23:29:36.85実際の動作は型によってまちまち。
(a -> b) -> f a -> f b という型と若干の規則が共通しているだけ。
0319デフォルトの名無しさん
2012/07/23(月) 23:56:19.91data A a b = A a b
instance Functor (A a) where
f `fmap` (A a b) = A a (f b)
次のようなことはできる?
instance Functor (A * b) where
f `fmap` (A a b) = A (f a) b
* は一つ目の型引数に対して Functor を定義しているつもり。
もちろんこれはエラーなんだけど、意図は伝わったと思う。
GHC の拡張機能でできるようになる?
0320デフォルトの名無しさん
2012/07/24(火) 00:24:48.07instance Functor (B b) where ...
でできないかな
0321デフォルトの名無しさん
2012/07/24(火) 07:58:25.02fmap (*3) (+100) 1
なぞこれは、引数2でいいの?
fmap (replicate 3) [1,2,3]
0322デフォルトの名無しさん
2012/07/24(火) 08:09:46.54fmap :: (Functor f) -> (a -> b) -> f a -> f b
だから、基本的にはfmapは引数を二つ取る関数
fmap (replicate 3) [1,2,3::Int]
なら、f=[], a=Int, b=[Int]だから返り値の型はf b=[[Int]]
fmap (*3) (+(100::Int))
だと、f=(->)Int, a=Int, b=Intだから返り値の型はf b=Int->Int
ここからIntを得るにはもう一つ引数を与える必要がある
0323322
2012/07/24(火) 08:10:41.80これは
fmap :: (Functor f) => (a -> b) -> f a -> f b
の間違い
0324デフォルトの名無しさん
2012/07/24(火) 20:14:32.46Readerモナドが欲しい時はnewtype R a b = R (a -> b)のようにコンストラクタを明記した形でだけ使わせるべき
0325デフォルトの名無しさん
2012/07/24(火) 21:19:11.76(r ->) がインスタンスになってたって困ることないだろう。
気にいらないなら明示的に Reader, runReader 使えばいいじゃん。
0326デフォルトの名無しさん
2012/07/24(火) 21:38:02.81> join (+) === (2*) みたいなことができて便利。
すげー。
0327デフォルトの名無しさん
2012/07/24(火) 22:27:52.060328デフォルトの名無しさん
2012/07/24(火) 23:05:03.730329デフォルトの名無しさん
2012/07/25(水) 00:32:26.57よくわからない。何がすごいの?
0330デフォルトの名無しさん
2012/07/25(水) 01:02:38.56例えられれば例えられる程分からん。
0331デフォルトの名無しさん
2012/07/25(水) 01:05:26.320332デフォルトの名無しさん
2012/07/25(水) 01:08:47.29定数の2を使わずに済む
圧倒的難読化効率
わざわざMonad ((->) a)のインスタンスをインポートしなければならない
ぐらいしか思いつかない
0333デフォルトの名無しさん
2012/07/25(水) 04:23:23.00この例だけがすごいわけじゃなくて、
f x x みたいに同じ引数を二回使うとき、
join f x と書けるということ。
ようは runReader なしで使える Reader モナドなので、
共通の引数を使い回せる。
0334デフォルトの名無しさん
2012/07/25(水) 06:46:55.56を、ポイントフリーで
join (***) f
と書くのはたまに見る。俺は使わないけど
0335デフォルトの名無しさん
2012/07/25(水) 07:30:14.88H本に載ってないような?
0336デフォルトの名無しさん
2012/07/25(水) 07:38:38.47H本にも載ってるはず…
0337デフォルトの名無しさん
2012/07/25(水) 14:03:27.240338319
2012/07/25(水) 19:26:48.34こうしたらエラーが出た。
data A a b = A a b
type B b a = A a b
instance Functor (B b) where
f `fmap` (A a b) = A (f a) b
エラーメッセージ
Type synonym `B' should have 2 arguments, but has been given 1
In the instance declaration for `Functor (B b)'
こっちは GHC 7.4.1 使ってる。
0339デフォルトの名無しさん
2012/07/26(木) 12:12:16.640340319
2012/07/26(木) 12:38:04.82いや、俺もそう思うんだが、>>320 がこれでできるんちゃうかと・・・
結局、>>319 の事はできるのかできないのか、どうなんだろ?
0341デフォルトの名無しさん
2012/07/26(木) 15:05:07.43@PostgreSQLをインストールした場所のbinへパスを通します
これはSetupがpg_config.exeを実行できるようにする為でございます
Acabalファイルのextra-libraries: 欄で、pq → libpq とします
BHaskellをインストールした場所のmingw\lib にliblibpq.aを用意しておきます
これにはPostgreSQLをインストールした場所のlibからlibpq.dllをコピーして
上記へリネームします
インストール後は消して良いです
CPostgreSQLをインストールした場所のlibへパスを通します
因みにlibにはlibpq.dllが、(@で通した)binにはlibpq.dllがさらに参照する2つの.dllがあります
以上で後は普通にセットアップして動く筈でございます
因みに私個人の環境は
Windows2000 SP4、Haskell Platform2011.4.0.0、HDBC-postgresql-2.3.2.1、PostgreSQL9.0.3でございます
0342デフォルトの名無しさん
2012/07/26(木) 21:06:22.62何故Just 3は、Just 3なの?
0343デフォルトの名無しさん
2012/07/26(木) 21:15:08.580344デフォルトの名無しさん
2012/07/26(木) 21:16:17.080345デフォルトの名無しさん
2012/07/26(木) 21:42:08.680346デフォルトの名無しさん
2012/07/26(木) 22:46:14.73そうすると関数になるから色々な関数の引数に利用できるのかな?
0347デフォルトの名無しさん
2012/07/26(木) 22:49:06.000348デフォルトの名無しさん
2012/07/26(木) 22:53:10.850349デフォルトの名無しさん
2012/07/26(木) 22:54:55.34すると3になるんだよ。すごいね
0350デフォルトの名無しさん
2012/07/26(木) 22:59:40.020351デフォルトの名無しさん
2012/07/26(木) 23:53:20.390352デフォルトの名無しさん
2012/07/26(木) 23:55:31.660353デフォルトの名無しさん
2012/07/27(金) 00:14:48.20じゃあHaskellの型って群なの?
0354デフォルトの名無しさん
2012/07/27(金) 01:09:05.200355デフォルトの名無しさん
2012/07/27(金) 01:19:40.57でしょうか?
0356デフォルトの名無しさん
2012/07/27(金) 01:26:37.080357デフォルトの名無しさん
2012/07/27(金) 01:28:03.190358デフォルトの名無しさん
2012/07/27(金) 01:30:49.100359デフォルトの名無しさん
2012/07/27(金) 01:36:06.29ttp://www.amazon.co.jp/dp/4274068854
この本買ってきて頭から読むと良いよ、Maybeまでなら土日使えば辿りつけるはず
ここで散発的な質問するより絶対そっちの方が早いから
0360デフォルトの名無しさん
2012/07/27(金) 08:08:49.030361デフォルトの名無しさん
2012/07/27(金) 09:05:16.02ハアハア
0362デフォルトの名無しさん
2012/07/27(金) 12:07:44.570363デフォルトの名無しさん
2012/07/27(金) 12:44:49.63Haskell とはどうやってつき合ってる?
Windows 用 GHC のアルファ バージョン(64bit の実験もされてる)を使ってる?
GHC は 7.6 になるまで待って、今は Linux とデュアルブートしたり、
VMware 仮想環境上の Linux で GHC 64 bit版を使ってる?
思い切ってメモリ8GB、Windows7 64bit版を乗せたノーパソ買ったんだけど、
Windows 用 GHC の 64bit版がまだ正式には無い事に今さら気づいた (´・ω・`)
0364デフォルトの名無しさん
2012/07/27(金) 13:06:14.88VMでもαでも本気で突き合いたいならどこでもできる
0365デフォルトの名無しさん
2012/07/27(金) 13:25:16.310366デフォルトの名無しさん
2012/07/27(金) 16:18:20.48伸びるとか、本気などのメンタル的な話ではなく、
実際に具体的にどの様に対応しているのかという話です。
併せて、32bit版にはない64bit版での運用上の問題点があれば、
それも聞いてみたいです。
>>364 はアルファ版も使ってみたのですよね。
例えば、大量のメモリを使ったりしたとき、
実用上問題にぶつかったとかあるでしょうか。
0367364
2012/07/27(金) 16:46:39.180368デフォルトの名無しさん
2012/07/27(金) 16:56:42.240369デフォルトの名無しさん
2012/07/27(金) 17:26:33.50リバプール
デボンシャー
ウェールズ
仲間はずれはどれでしょう?
0370デフォルトの名無しさん
2012/07/27(金) 17:29:18.190371デフォルトの名無しさん
2012/07/27(金) 18:39:53.8832bit版GHCじゃ困る理由があるの?
0372デフォルトの名無しさん
2012/07/27(金) 18:51:50.90どうして知らないのでしょうか。
>>363 で、Windows の 64bit 版をメイン使ってる人に
Haskell とはどうやってつき合ってるのかを聞いて、
>>364 でそれに応じているので、当然使ってると思ったのですが。
しかも、VMでもαでも本気で突き合いたいならどこでもできる事を知っている。
自分で体験されたから知っているのではないのですか。
ひとの受け売り、また聞き、何となく脳内妄想、といった類なのでしょうか。
でしたら残念です。
0373デフォルトの名無しさん
2012/07/27(金) 20:07:21.510374デフォルトの名無しさん
2012/07/27(金) 20:23:08.45すまんすまん
>>364 の的外れな返答についカッとなってしまった。
質問をちょっと変えて、的を絞るわ。
Windows7 64bit 版で GHC 64ビット版を使う方法はいくつかありそうですが、
処理速度をできるだけ落とさないように、という主眼だと、
どの方法がベターでしょうか?
0375デフォルトの名無しさん
2012/07/27(金) 20:30:51.3132bit版のGHCだと、メモリを大量に使えなかったりしません?
ちょっと大きめサイズで移流拡散現象をシミュレートしたくて、
Windows7の32版でやったら使えるメモリが足りず、
満足いくシミュレーションができなかったんです。
64bit版のWindows + 32bit版GHC で8GBメモリとか使えるのなら、
それで問題ないのですけど。
今はマシンが手許になくて試すことができない状態です。
0376デフォルトの名無しさん
2012/07/27(金) 21:08:25.310377デフォルトの名無しさん
2012/07/27(金) 21:10:01.43メモリ8G使いたいなら確かに64bit版をなんとかして使うしかないな、納得
0378デフォルトの名無しさん
2012/07/27(金) 21:25:51.33俺以外にも移流拡散解析をHaskellでやろうとか思う奴がいるとは、、、
0379デフォルトの名無しさん
2012/07/27(金) 22:34:10.850380デフォルトの名無しさん
2012/07/27(金) 23:32:50.02こ難しいインテリで付き合いにくいで
何とか理解する方法ないでしょうか?
0381デフォルトの名無しさん
2012/07/27(金) 23:35:32.40無理矢理ヤれば、そのうちアプリカティブちゃんのほうから腰振ってくるよ
まずはヤってみろ
0382デフォルトの名無しさん
2012/07/28(土) 00:24:39.830383デフォルトの名無しさん
2012/07/28(土) 00:31:59.82do記法の<-を普通の変数束縛のlet構文だと思ってみると
do { f <- mf ; x <- mx ; return f x }
これが
let f = mf in let x = mx in f x
こうなる。実際Identityモナドのdo記法とlet式は意味的には同等。
しかし変数束縛を使わずにこう書きたいこともある。
mf mx
これに相当するものがApplicativeを使うとこう書ける。
mf <$> mx
つまりApplicativeを使えば変数束縛が減らせゴルフコードが書きやすくなるということ。
0384383
2012/07/28(土) 00:34:50.860385訂正
2012/07/28(土) 00:56:52.15do記法の<-を普通の変数束縛のlet構文だと思ってみると
do { x1 <- mx1 ; x2 <- mx2 ; return f x1 x2 }
これが
let x1 = mx1 in let x2 = mx2 in f x1 x2
こうなる。実際Identityモナドのdo記法とlet式は意味的には同等。
しかし変数束縛を使わずにこう書きたいこともある。
f mx1 mx2
これに相当するものがApplicativeを使うとこう書ける。
f <$> mx1 <*> mx2
つまりApplicativeを使えば変数束縛が減らせゴルフコードが書きやすくなるということ。
0386デフォルトの名無しさん
2012/07/28(土) 02:01:13.63Prelude Control.Applicative> let add = (+)
Prelude Control.Applicative> add 3 4
7
Maybe上の足し算ができちゃう><
Prelude Control.Applicative> add <$> Just 3 <*> Just 4
Just 7
リストモナド上で多値の足し算もできちゃう><
Prelude Control.Applicative> add <$> [1,2,3] <*> [10,20,30]
[11,21,31,12,22,32,13,23,33]
まあ読み書きやすくした部分がapplicativeだけどさ
0387デフォルトの名無しさん
2012/07/28(土) 08:47:57.970388デフォルトの名無しさん
2012/07/28(土) 09:15:47.980389デフォルトの名無しさん
2012/07/28(土) 09:22:51.230390デフォルトの名無しさん
2012/07/28(土) 16:11:08.070391デフォルトの名無しさん
2012/07/28(土) 17:20:35.960392デフォルトの名無しさん
2012/07/28(土) 18:40:30.260393デフォルトの名無しさん
2012/07/28(土) 21:02:13.680394デフォルトの名無しさん
2012/07/28(土) 21:58:11.97http://themonadreader.files.wordpress.com/2010/01/issue15.pdf
free monad:
http://www.haskellforall.com/2012/06/you-could-have-invented-free-monads.html
http://www.iai.uni-bonn.de/~jv/mpc08.pdf
0395デフォルトの名無しさん
2012/07/28(土) 22:14:58.18ありがとう。
0396デフォルトの名無しさん
2012/07/29(日) 13:51:01.380397デフォルトの名無しさん
2012/07/29(日) 13:52:53.800398デフォルトの名無しさん
2012/07/29(日) 17:51:00.77「 と」とか「 くさ」とか。
0399デフォルトの名無しさん
2012/07/29(日) 19:26:20.440400デフォルトの名無しさん
2012/07/29(日) 19:59:37.88型が文脈持つってなんなの?
0401デフォルトの名無しさん
2012/07/29(日) 21:03:27.45変数への破壊的代入を行えるインタプリタも行えないインタプリタもあるように、
変数への破壊的代入を行える文脈も行えない文脈もある。
例えばIOモナドを使うとIOの順序がsequentialになるが、
これはIOモナドがstrictな言語のインタプリタだからだと解釈できる。
(ただしhttp://www.haskell.org/haskellwiki/What_a_Monad_is_notの
Monads are not about strictnessにあるように、non-strictな言語のインタプリタだって作れる)
0402デフォルトの名無しさん
2012/07/29(日) 21:22:56.500403デフォルトの名無しさん
2012/07/29(日) 21:36:40.770404デフォルトの名無しさん
2012/07/29(日) 21:54:06.03これが「成否」のコンテキストなんだけど。
「成否」というコンテキストの中での値が、「否」なら値なし、「成」ならa型の値。
これは抽象データ「型」でしょ?
この抽象データ型は、a型の値に「成否」コンテキストを付与してる。
別に難しいことじゃないよね。
0405デフォルトの名無しさん
2012/07/29(日) 22:21:47.700406404
2012/07/29(日) 22:37:14.660407デフォルトの名無しさん
2012/07/29(日) 22:39:27.960408デフォルトの名無しさん
2012/07/30(月) 01:34:58.730409デフォルトの名無しさん
2012/07/30(月) 02:38:13.45実は『日本語としての』文脈の意味がわかんねって言いたいんじゃね 。>>405とか見る限り
辞書引いてください
0410デフォルトの名無しさん
2012/07/30(月) 05:36:18.380411デフォルトの名無しさん
2012/07/30(月) 12:41:29.26型が文脈そのもの。持つのではない。
ラップされることで文脈を持つのは値の方。
0412デフォルトの名無しさん
2012/07/30(月) 14:29:08.97文脈を持った型というよりも文脈を持った値として考えるべきじゃね。
そこでいう型は別に大事じゃない。関数適用したら別の方に簡単に変わるし。
大事なのはあくまでも文脈。
文脈を持った値というのは文脈を持つコンテナに包まれてる値としてもいいかも。
その文脈についての実装をbindとかで実装することでその文脈として適した振る舞いをすることができる。
0413デフォルトの名無しさん
2012/07/30(月) 17:51:46.46代数データ型で文脈を定義しているので。
それから>>404のMaybeは、定義の形を見れば明らかだが、
要素が一つしかないコンテナとみなせる。
つまりコンテナ型は文脈でもある。
だからリストモナドというものがある。
> 文脈を持った値というのは文脈を持つコンテナに包まれてる値としてもいいかも。
というのは相当おかしい。
0414デフォルトの名無しさん
2012/07/31(火) 00:38:45.92うーんよくわからけど、Maximaの事実と文脈みたいなものなのかな?
ある値や関数にMaybeという事実を適用した結果は、失敗するかも
しれないという事実の集合である文脈を返すことができるってことなのかな?難しい
0415デフォルトの名無しさん
2012/07/31(火) 00:55:53.18なぜ不正確な話をしている412にレスしているのかわからんし、
> ある値や関数にMaybeという事実を適用した結果は、失敗するかも
もうちょっと落ち着いて、解説ドキュメントを正確に理解するようにしたら?
0416デフォルトの名無しさん
2012/07/31(火) 10:02:54.99コンテキスト付きの値というよりcomputationという表現を使ってるな
m aだとaという型の値を主軸にした何らかの計算(実際にaを通常の値として取り出せるとは限らない)というイメージか
コンテキストと聞くとどちらかというとcomonadをイメージしてしまうね
コモナドの場合はw aという値からaは「必ず」取り出せる
0417デフォルトの名無しさん
2012/07/31(火) 13:32:22.97別にリストモナドとかも
> 文脈を持った値というのは文脈を持つコンテナに包まれてる値としてもいいかも。
で、おかしくなくない?
0418デフォルトの名無しさん
2012/07/31(火) 17:18:32.38コンテナが文脈そのもので、
コンテナが文脈を持つのではない。
0419デフォルトの名無しさん
2012/07/31(火) 19:35:51.55リストもなどでも、結果を順列として出すのか組み合わせとして出すのかなど文脈を変えることはできるけど?
0420デフォルトの名無しさん
2012/07/31(火) 20:01:58.390421デフォルトの名無しさん
2012/07/31(火) 20:29:53.64その例だとリスト自体が文脈を表現してるじゃないですか。
0422デフォルトの名無しさん
2012/07/31(火) 20:59:52.58型だけでは表現できないような、どうやって使うのか、という意味を>>=に込めていると理解していたのだけれど。
List型は0個以上の値の並びっていう意味しか込められないけど、
0個以上の値を返す計算を繋げるんだよーっていう文脈が>>=で伝わるっていうような。
Listで作れるモナドってconcatMapしか無いのかな?もしあってもHaskellはinstanceにしてくれないけど。
0423デフォルトの名無しさん
2012/07/31(火) 21:44:11.69同じリストというコンテナでも、順列か組み合わせかなど文脈を変えることが出来る。
>>422の言うようにbindとreturn合わせてのモナドというのが正しいんじゃない?
0424デフォルトの名無しさん
2012/07/31(火) 22:04:39.61文脈が固定されてないのは、単純なMaybeの例でさえJustとNothingがあり明らか。
なぜそんなことを言い始めるのか理解不能。
http://learnyouahaskell.com/for-a-few-monads-more
この辺から勉強し直すと良い。
リストを値と考えて、それにOrderdなどの制約を化した操作群を考える場合、
それはリストの要素に対してでなく、リストに対してコンテキストを付与したことになっている。
>>417はその階層を混同している。
0425デフォルトの名無しさん
2012/07/31(火) 22:34:15.79Haskellのモナドは数学のモナドではない気がするのは俺だけか…
0426デフォルトの名無しさん
2012/07/31(火) 23:09:27.62リストで作れるモナドは少なくとももう一つある(と思う)
ZipListというReaderみたいなやつ
import Data.List
import Data.Maybe
newtype Alt a = Alt [a]
deriving Show
instance Monad Alt where
return x = Alt $ repeat x
Alt xs >>= f = Alt $ takeWhileJust $ zipWith g [0..] xs
where
g i x = case f x of
Alt ys -> ys `at` i
at :: [a] -> Int -> Maybe a
at xs n = listToMaybe $ drop n xs
takeWhileJust :: [Maybe a] -> [a]
takeWhileJust = foldr f []
where
f (Just x) rest = x : rest
f Nothing _ = []
0427デフォルトの名無しさん
2012/08/01(水) 00:33:21.60PHPやperlと比べた時のhaskellの優位性ってどんなところにあるんでしょうか?
0428デフォルトの名無しさん
2012/08/01(水) 00:45:54.14日本語対応が完璧
どこのレンタルサーバでもインストールされてる
正規表現によるマッチングがファーストクラス
0429デフォルトの名無しさん
2012/08/01(水) 00:50:22.38言語の練習がてらという目的とは必ずしも合致しませんが、
Haskell には Yesod という Web フレームワーク ライブラリがあり、
これが Web サイト構築の手間をかなり省いてくれます。
(Web フレームワークは他にもいくつかありますが)
で、このライブラリが Web フレームワークをプログラマに提供するために
Haskell の様々なテクニックを駆使しています。
テンプレート Haskewll 然り、ストリームデータに対する考え方然り。
このようなテクニックのおかげで、末端のプログラマは、
Web ページの見た目やサイトの表層的な構成に縛られない「直感的」な記述で、
Web サイトを Haskell のコードとして定義できます。
そのことにより、もともと Haskell が持っていた他言語に対する利点が、
そのまま Web サイトの構築に生かせるという点が haskellの優位性になります。
たとえば参照透過性や遅延評価などですね。
0430デフォルトの名無しさん
2012/08/01(水) 01:22:11.100431デフォルトの名無しさん
2012/08/01(水) 01:59:34.98HaskellのWikibookにのってる unit と join を使った説明は数学のモナドそのもの
0432デフォルトの名無しさん
2012/08/01(水) 21:55:56.60モナドというより、カルテシアン閉と言った方が正確な気が…
0433デフォルトの名無しさん
2012/08/01(水) 22:24:36.67欲を言えばGArrow
0434デフォルトの名無しさん
2012/08/01(水) 22:28:29.780435デフォルトの名無しさん
2012/08/01(水) 22:32:21.040436デフォルトの名無しさん
2012/08/01(水) 22:36:33.95圏論を知らないと意味を解釈できないライブラリがあるのは確かだが、圏論の知識がない人が同じモノをHaskellで作ることはできる
Haskellにおける圏論は、算数の九九で言うと数学基礎論みたいなもんだから、必須知識ではない
0437デフォルトの名無しさん
2012/08/01(水) 22:37:32.23トポスなんてHaskellの本に出てこないけど
ここでは一般常識なんでしょ?
0438デフォルトの名無しさん
2012/08/01(水) 22:40:37.48ここでトポスが一般常識になっていると感じたレスって、たとえばどれ?
0439デフォルトの名無しさん
2012/08/01(水) 22:48:23.800440デフォルトの名無しさん
2012/08/01(水) 22:58:11.29しかし、Haskellはトポスではない
0441デフォルトの名無しさん
2012/08/02(木) 01:47:08.460442uy
2012/08/02(木) 13:23:21.740443デフォルトの名無しさん
2012/08/02(木) 17:59:53.21■ mathematica
{1,2,3,4,5}~Select~(2<#<5&) 2
■ matlab
x=[1 2 3 4 5]; x(2<x&x<5).*2
0444デフォルトの名無しさん
2012/08/03(金) 10:15:14.99短いがあまり美しくないな
0445デフォルトの名無しさん
2012/08/03(金) 10:20:39.590446デフォルトの名無しさん
2012/08/03(金) 16:00:51.900447デフォルトの名無しさん
2012/08/03(金) 16:02:10.760448デフォルトの名無しさん
2012/08/03(金) 16:08:17.05FunctorやApplicativeを理解するためにそこまでのガチガチの議論は必要ない。
0449デフォルトの名無しさん
2012/08/03(金) 16:31:07.150450デフォルトの名無しさん
2012/08/03(金) 16:52:10.750451デフォルトの名無しさん
2012/08/03(金) 19:07:04.320452デフォルトの名無しさん
2012/08/03(金) 19:52:47.73普通は↓こんな感じ
Select[Range[1, 5], 2 < # < 5 &]*2
0453デフォルトの名無しさん
2012/08/04(土) 00:54:29.03■ Scheme
(print (list-ec (: x 1 6) (if (< 2 x)) (if (< x 5)) (* x 2)))
0454デフォルトの名無しさん
2012/08/05(日) 12:07:58.010455デフォルトの名無しさん
2012/08/05(日) 12:37:56.760456デフォルトの名無しさん
2012/08/05(日) 20:17:39.53発祥の古さを考えると信じられない
0457デフォルトの名無しさん
2012/08/06(月) 00:33:50.34ウインドウにボタン一つならいいんだろうが。
0458デフォルトの名無しさん
2012/08/06(月) 14:37:17.32お勧めのtutorialサイト知ってる所あったら教えて。英語もおkです。
0459デフォルトの名無しさん
2012/08/06(月) 19:08:38.08公式ので十分じゃないか。
あとは GTK のドキュメントとチュートリアル見て、
gtk2hs のライブラリ ドキュメントから使い方を推理して、
試行錯誤しながら使っていくしかないと思う。
0460458
2012/08/06(月) 19:41:43.49黄色線の三角形描くやつやってみて、さらにもうちょい無いかなと思ったんだけど。
小さな描画サンプルコードいくつか見つけたので、その辺弄ってみるよ。
レスありがと
0461デフォルトの名無しさん
2012/08/06(月) 23:05:35.86Yampa はまだ更新されてると思うが。
つい最近も3月末に更新されたし。
0462デフォルトの名無しさん
2012/08/06(月) 23:13:29.870463デフォルトの名無しさん
2012/08/06(月) 23:16:00.550464デフォルトの名無しさん
2012/08/06(月) 23:24:56.210465デフォルトの名無しさん
2012/08/06(月) 23:28:50.300466デフォルトの名無しさん
2012/08/06(月) 23:35:53.200467デフォルトの名無しさん
2012/08/06(月) 23:51:18.77知り合いにきいたらealangをすすめられた
そんでついでにハスケルもいけるかもときいたのでここで質問してみました
0468デフォルトの名無しさん
2012/08/06(月) 23:55:08.300469デフォルトの名無しさん
2012/08/07(火) 00:17:37.950470デフォルトの名無しさん
2012/08/07(火) 01:19:18.310471デフォルトの名無しさん
2012/08/07(火) 01:39:28.26erlangのメッセージ渡しの並列処理はHaskellも取り入れてほしい
MVarは使いにくい
0472デフォルトの名無しさん
2012/08/07(火) 08:44:11.80Windows2000で最新版Haskell PlatformのWin32パッケージが
正しくインストールされていない不具合を修正するんだ!
0473デフォルトの名無しさん
2012/08/07(火) 08:45:52.380474デフォルトの名無しさん
2012/08/07(火) 08:57:40.420475デフォルトの名無しさん
2012/08/07(火) 12:13:10.44このビッグブラザーがOSとの間を牛耳ってる限りC/C++に勝てないじゃん?
0476デフォルトの名無しさん
2012/08/07(火) 12:30:27.35そこまでする必要が無いと言うなら作業量との兼ね合いでrtsによるオーバーヘッドも無視できる場合も多々ある
0477デフォルトの名無しさん
2012/08/07(火) 18:45:01.55http://www.fos.kuis.kyoto-u.ac.jp/sig-ppl/index.php?ss2012
PPLサマースクール2012 関数型言語ベースの先進的Webフレームワーク
0478デフォルトの名無しさん
2012/08/08(水) 01:17:29.990479デフォルトの名無しさん
2012/08/08(水) 13:06:38.83俺も試そうと思ってるから先に試した人が遭遇した不具合は気になる
0480デフォルトの名無しさん
2012/08/10(金) 13:35:41.80ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248215/?ST=ittrend
書籍化して欲しい
0481デフォルトの名無しさん
2012/08/10(金) 16:46:36.38ア ニ メ 化 決 定
0482デフォルトの名無しさん
2012/08/11(土) 10:51:05.63disconnectはしなくていいのですか?
0483デフォルトの名無しさん
2012/08/11(土) 10:53:33.10with〜でエラーハンドラと共に接続するんですかね
0484デフォルトの名無しさん
2012/08/11(土) 11:17:31.21with〜で渡すのはメインプロセスの方か
0485デフォルトの名無しさん
2012/08/11(土) 11:49:21.160486デフォルトの名無しさん
2012/08/11(土) 13:01:00.870487デフォルトの名無しさん
2012/08/12(日) 09:53:57.10Yesod のロゴマークって、Haskell のそれを
ほぼ上下逆さまにしたものなんだ(横線1本増えて、形も微妙に違うけど)
0488デフォルトの名無しさん
2012/08/12(日) 22:54:29.02PASS:
Just ""
これ仕様なの?
何も入力しなかったらNothing を期待してたんだけど
だって空文字のパスワードなんてあっていいの? って話じゃん
0489デフォルトの名無しさん
2012/08/13(月) 00:18:35.580490デフォルトの名無しさん
2012/08/13(月) 00:24:34.16どんなパスワードを許容するかというポリシーは、パスワードを受け取るメカニズムとは分離すべき
0492デフォルトの名無しさん
2012/08/15(水) 02:22:06.28これはHaskell処理系がDBから返ってくる日本語文字列を正しく取り込めないことに起因してそうです
これはどうしようもないのでしょうか?
私が普段Shift-JISコンソールで日本語文字列を扱う時は
ソースの日本語文字列をUTF8で書いて
それをUTF8を正しく扱うライブラリの力を借りて取り込んで
さらにiconvライブラリでShift-JISに変換しています
HDBCライブラリの方で正しく取り込んでくれない限り
こちらは手の出しようが無いのでしょうか?
HDBCはLatin-1しか扱うつもりがないのですか?
救済措置はないのですか?
0493デフォルトの名無しさん
2012/08/15(水) 07:44:16.26く・そ・い・ま・い・ま・し・い!!!
0494デフォルトの名無しさん
2012/08/15(水) 07:45:52.090495デフォルトの名無しさん
2012/08/15(水) 08:28:54.22逆にRDBがUTF-8じゃないとかなり面倒。
0496デフォルトの名無しさん
2012/08/15(水) 11:31:34.40無効文字だから置き換えた事を意味する0xfffdを連発してるんです。。。
connectPostgreSQL: FATAL: ユーザ"postgres"のパスワード認証に失敗しました
となるところを
connectPostgreSQL: FATAL: \65533\65533\65533[\65533U"postgres"\65533\771p\65533X\65533\65533\65533[\65533h\65533F\65533\1538\590\65533\65533s\65533\65533\65533\1794\65533\65533\65533
となります
これはもうぶっ壊れてるでしょう?
直せないでしょう?
0497デフォルトの名無しさん
2012/08/15(水) 12:14:42.540498デフォルトの名無しさん
2012/08/15(水) 12:40:17.82僕のPostgreSQL は 9.0.3 でした
てへぺろ
0499デフォルトの名無しさん
2012/08/19(日) 02:07:11.79data A = A Int Int deriving Show
main = let f1 = 0
f2 = 0 in print A{..}
[1 of 1] Compiling Main ( *.hs, *.o )
Linking *.exe ...
*.exe: rec.hs:7:14-18: Missing field in record construction
RecordWildCards危なすぎだろ……
0500デフォルトの名無しさん
2012/08/19(日) 06:57:20.49バグ報告しようぜ
0501デフォルトの名無しさん
2012/08/19(日) 12:03:18.94{-# LANGUAGE RecordWildCards #-}
data A = A Int Int deriving Show
main = print A{..}
0502デフォルトの名無しさん
2012/08/19(日) 12:04:49.440503デフォルトの名無しさん
2012/08/19(日) 12:43:33.46フィールド名と同名の変数があればそれに展開される機能であって、
同名の変数がなければ「何も展開されない」機能なのかな。
>>500 の言うように、警告くらいは出すべきだと俺も思う。
ただ、未初期化じゃなくて、展開できないフィールドかあれば、だけど。
ただ、これ一つを以て Haskell is UnSafe!!! というのは如何かと思う。
デフォルトではなく、まして GHC の独自拡張なんだし。
0504デフォルトの名無しさん
2012/08/19(日) 13:01:24.090505デフォルトの名無しさん
2012/08/19(日) 13:17:49.77その前に遅延パターン(irrefutable pattern)の時点で unsafe になるな・・・
遅延パターンは Haskell 98 の時点で Haskell の公式だし
0506デフォルトの名無しさん
2012/08/19(日) 13:22:43.130507デフォルトの名無しさん
2012/08/19(日) 13:36:12.01普通のレコード型に対してならワイルドカードの未初期化警告が出るよ
>>499みたいになるのはフィールドラベルのないデータ型だけ
{-# LANGUAGE RecordWildCards #-}
data A = A {f1, f2 :: Int} deriving Show
main = print A{..}
[1 of 1] Compiling Main ( test.hs, test.o )
test.hs:3:14:
Warning: Fields of `A' not initialised: f1, f2
In the first argument of `print', namely `A {..}'
In the expression: print (A {..})
In an equation for `main': main = print (A {..})
Linking test ...
0508デフォルトの名無しさん
2012/08/19(日) 17:51:55.10つまりRecordWildCardsの束縛を不可反駁で「なく」する拡張があればすべて解決する……?
0509デフォルトの名無しさん
2012/08/19(日) 18:45:29.120510デフォルトの名無しさん
2012/08/20(月) 05:10:43.350511デフォルトの名無しさん
2012/08/20(月) 05:19:54.470512デフォルトの名無しさん
2012/08/20(月) 05:29:24.690513デフォルトの名無しさん
2012/08/20(月) 06:02:33.150514デフォルトの名無しさん
2012/08/20(月) 06:04:34.530515デフォルトの名無しさん
2012/08/20(月) 23:00:48.760516デフォルトの名無しさん
2012/08/21(火) 03:58:06.310517デフォルトの名無しさん
2012/08/21(火) 07:17:10.05人( ・∀・)
0518デフォルトの名無しさん
2012/08/23(木) 02:03:55.490519デフォルトの名無しさん
2012/08/23(木) 03:20:29.680520デフォルトの名無しさん
2012/08/23(木) 06:29:33.190521デフォルトの名無しさん
2012/08/23(木) 20:11:16.48データサイズの増加と計算時間の予測が難しくなるのはつらい
0522デフォルトの名無しさん
2012/08/23(木) 20:58:22.63さもなくば学べ。
0523デフォルトの名無しさん
2012/08/23(木) 21:12:33.07そんなレスするくらいなら、
データサイズの増加と計算時間の予測方法を提示した方が、
議論が良い方向に進むのではないか?
私はその点に関して知識が無く何も提示できないから黙っておくが
0524デフォルトの名無しさん
2012/08/23(木) 21:27:57.23特に途中経過出力するときの時間が違う
0525デフォルトの名無しさん
2012/08/23(木) 21:44:01.41空間量は、遅延評価でも、正格評価のときの計算量のオーダーと空間量のオーダーのより大きいほう以上は増加しない。
たいていのアルゴリズムは(すべてのアルゴリズムは?)、遅延評価でも正格評価でも、計算量のオーダーは空間量のオーダーと同じか、それより大きい。
そういった証明とかは知らないけど、たぶん、こうだと考えている。
0526デフォルトの名無しさん
2012/08/24(金) 01:58:34.59正格での場合の総計算量のうち必要な空間量とか、この時点で想定される計算時間が遅延故に全く異なることになるからな。
まぁ確かにこうすれば、そのへんの増大に悩まされないですむよって方針を教えてもらったほうが役に立つわな。
0527デフォルトの名無しさん
2012/08/24(金) 04:05:15.34遅延評価って、やったことにして本当に必要になるまで動き出さないで次行くじゃん
モナドにしたって順序の保証こそすれ
いつ動くかは保証しないじゃん
これパラレルという概念に真っ向から唾を吐くものじゃないの?
0528デフォルトの名無しさん
2012/08/24(金) 04:11:31.950529デフォルトの名無しさん
2012/08/24(金) 05:02:59.24そしてバッドノウハウのように生まれたのがNFDataなのでした
まあ普通に便利だけどねNFDataは
0530デフォルトの名無しさん
2012/08/24(金) 08:36:12.07java の DTrace みたいなのが欲しいねーって
おい Haskell にも DTrace があるじゃんよ
0531デフォルトの名無しさん
2012/08/24(金) 11:24:02.75並列同期と遅延評価は表裏一体。
0532デフォルトの名無しさん
2012/08/24(金) 11:50:46.76副作用をなくすからこそ、遅延評価でよくてパラレルにも出来るのだから、IOモナドとか入る箇所はそれ相応の注意を払わないかんのは仕方ないよね
0533デフォルトの名無しさん
2012/08/24(金) 12:52:30.38ghc 7.4.2 です。
0534デフォルトの名無しさん
2012/08/24(金) 13:47:21.12Haskell処理系を作るしかないかと
0535デフォルトの名無しさん
2012/08/24(金) 21:33:21.71System.Mem.performGC
0536533
2012/08/24(金) 21:51:49.46見逃していました。
なんか、GHC の Wiki 見てると、
アルゴリズムとしては世代別 GC を使っている感じなのですが、
その辺りのコード内での制御はまだできなさそうですね。
とにかく、ガベージコレクトを促すことができるだけでも助かりました。
ありがとうございました。
0537デフォルトの名無しさん
2012/08/26(日) 01:56:32.700538デフォルトの名無しさん
2012/08/26(日) 02:12:43.830539デフォルトの名無しさん
2012/08/26(日) 02:56:31.790540デフォルトの名無しさん
2012/08/26(日) 03:12:42.89ハードリアルタイムシステムとかにもぴったりっぽい
0541デフォルトの名無しさん
2012/08/26(日) 03:20:21.13Haskellが組み込みに特に適している一番の理由は「C言語を自動生成しやすいから」
0542デフォルトの名無しさん
2012/08/26(日) 08:55:55.63僕はもう迷いたくないんだ
0543デフォルトの名無しさん
2012/08/26(日) 08:57:23.970544デフォルトの名無しさん
2012/08/26(日) 10:16:31.170545デフォルトの名無しさん
2012/08/26(日) 10:18:13.93それでゲーム作ってるし。
0546デフォルトの名無しさん
2012/08/26(日) 10:21:17.360547デフォルトの名無しさん
2012/08/26(日) 16:32:50.87メンテナンス?
0548デフォルトの名無しさん
2012/08/26(日) 18:26:39.540549デフォルトの名無しさん
2012/08/26(日) 20:35:41.27OpenGL使えるのは知ってるんだけど、
ゲームだと入力(ゲームパッドとか)と音もHaskellでいけるの?
0550デフォルトの名無しさん
2012/08/26(日) 20:50:13.63いける
0551デフォルトの名無しさん
2012/08/26(日) 22:35:37.20最悪の場合はCを呼び出せばいい
0552デフォルトの名無しさん
2012/08/26(日) 22:51:48.43なるほど、今度調べてみる
0553デフォルトの名無しさん
2012/08/27(月) 05:13:38.080554デフォルトの名無しさん
2012/08/27(月) 06:39:23.08もう迷わない
0555デフォルトの名無しさん
2012/08/27(月) 07:17:17.35IOモナドは当然使うことになるが、レンダリングパイプラインの深いところは
ちゃんと隠すようにプログラムするから、Cよりもう少し抽象的になる。
たとえば、GPipe なんか使ってみてはどうだ?
なかなかよくできたライブラリだぞ。
ただ、ゲームではなかなか使いにくいから、
俺は GPipe を参考に自分用のライブラリを作ったが。
0556デフォルトの名無しさん
2012/08/27(月) 10:40:24.890557デフォルトの名無しさん
2012/08/27(月) 12:33:47.71どうして?
公開しないつもりで自分だけのために作ったライブラリを見せる理由が思いつかない。
0558デフォルトの名無しさん
2012/08/27(月) 12:42:13.38なんかこんなん作ったよいうから、どんなん?って言ってるだけで。
なんか自意識過剰なんじゃねーの。わざわざココで俺スゴイ?俺スゴイ?とか書いてるくせに。
0559デフォルトの名無しさん
2012/08/27(月) 13:07:56.04・Haskell使えばCより抽象度は上がる
・GPipeがいいらしいがゲームでは使いにくいかもしれない
・俺SUGEE
0560デフォルトの名無しさん
2012/08/27(月) 13:39:21.03客「見せる理由が見つからない」
嬢「...」
0561デフォルトの名無しさん
2012/08/27(月) 17:57:08.360562デフォルトの名無しさん
2012/08/27(月) 18:00:32.510563デフォルトの名無しさん
2012/08/27(月) 18:17:29.330564デフォルトの名無しさん
2012/08/27(月) 18:20:48.130565デフォルトの名無しさん
2012/08/27(月) 18:28:10.110566デフォルトの名無しさん
2012/08/27(月) 19:24:45.63要は自信がないんだな
0567デフォルトの名無しさん
2012/08/27(月) 19:47:52.950568デフォルトの名無しさん
2012/08/27(月) 20:18:45.750569デフォルトの名無しさん
2012/08/27(月) 22:28:43.79細かいところまで挙げれば色々あるが、大きなところでは2つ。
ただ、これらは作るゲームの規模や求めるクォリティに依ると言われれば、
確かにそれは否定できないことを先に断っておく。
・UIのインフラがGLUT固定であること
GLUTがゲームに向いていないと言うよりも、もっとゲームに向いたライブラリがあるのに
それを基盤として使えないのが問題。
他の FRP ライブラリとも相性悪すぎる。
また、ウィンドウ生成の仕組みがラップされているから、マルチウィンドウができない。
よって、デバッグ情報などはゲームと同じウィンドウに出すことになる。
・テクスチャに直接レンダリングできない
どうも、レンダリングターゲットとして用意されたバッファは
レンダリングされたフレームバッファの内容をテクスチャへ「コピー」はできる。
0570569
2012/08/27(月) 22:31:39.36あと、言い忘れたが私は >>555 だ。
・テクスチャに直接レンダリングできない
どうも、レンダリングターゲットとして用意されたバッファは1枚しかないようだ。
そのバッファの内容をテクスチャへ「コピー」して使うことはできる。
0571デフォルトの名無しさん
2012/08/27(月) 23:18:41.47二つ以上組み合わせると相性が悪いのだ
抽象と具象のような上下関係がないライブラリがあれば
どちらが上か喧嘩することもないと思うのだが
0572デフォルトの名無しさん
2012/08/28(火) 00:31:31.690573デフォルトの名無しさん
2012/08/28(火) 02:40:42.40臆病な自尊心と尊大な羞恥心
山月記ですか
0575デフォルトの名無しさん
2012/08/28(火) 05:26:47.13その声は、我が友、李徴子ではないか?
0576デフォルトの名無しさん
2012/08/28(火) 22:55:18.270577デフォルトの名無しさん
2012/08/29(水) 13:28:14.97まるでモナドの真意が分からなくてさまよい続ける俺を見ているようだ
ああ、そうかモナドって漢字で「喪等」って書くんだろ
モテで頭の良い人間が俺のような妖怪を閉じ込めておくために作った知的迷宮なんだろ
0578デフォルトの名無しさん
2012/08/29(水) 14:40:30.240579デフォルトの名無しさん
2012/08/29(水) 16:28:47.11これよりのちは一切の思念を棄てただただモナドを働かすことによってみずからを救おうと心がけるがよい。
モナドとは人の作用の謂じゃ。モナドは概観によるときは無意味のごとくなれども、その細部に直接働きかけるときはじめて無限の意味を有つのじゃ。
敦ちゃん人気だねえ。
0581デフォルトの名無しさん
2012/08/29(水) 21:07:58.070582デフォルトの名無しさん
2012/08/29(水) 21:39:25.80ここはダメだわw
0583デフォルトの名無しさん
2012/08/29(水) 23:24:29.370584デフォルトの名無しさん
2012/08/30(木) 00:57:19.87メーリングリストに登録すればいいと思う
0585デフォルトの名無しさん
2012/08/30(木) 03:31:02.20f . g
も発動の順序を保証しますよね?
モナドは造られたものじゃない
見つけられたものなんでしょう
これはC++がテンプレートの機構をハックしてTMPを見つけた事に似てる気がします
0586デフォルトの名無しさん
2012/08/30(木) 07:19:19.15f . g も評価の順序は f より g が先だと保証されている。
(発動とか訳分からん用語使うな)
にも関わらずわざわざ (>>=) などが改めて定義されているのは、
Haskell でモナドを構成するのに評価順序以外にも必要な要素があるからだ。
> モナドは造られたものじゃない
> 見つけられたものなんでしょう
「A History of Haskell」に何から発想を得たのか少しだけ書かれている(7章2節)。
解説が面倒だから、興味があれば自分で読んでくれ。
0587586
2012/08/30(木) 07:25:22.85すまん、「評価」という操作が何か、どこまでを指しているかに依っては、
>>586 の説明は間違っているかもしれんな。
より正確に言えば、 (f . g) x も x に適用する関数は
f より g が先だと保証されている。
0588デフォルトの名無しさん
2012/08/30(木) 10:19:40.49IOモナドは「発動しない」ことを保証しますよ
つまり IO a の値から a の値がただちに発生することはない
0589デフォルトの名無しさん
2012/08/30(木) 11:02:46.36Monoide
0590デフォルトの名無しさん
2012/08/30(木) 21:06:58.47例えばリストを集合と見立てて冪集合を作る関数powersetを以下の用に定義します
powerset :: [a] -> [[a]]
powerset [] = [[]]
powerset (x:xs) = one ++ other
where one = [(x:ys)|ys<-other]
other = powerset xs
これを用いて与えられた集合からn個取り出した組み合わせの集合のリストを作る関数
combinationsを定義すると、
combinations :: Int -> [a] -> [[a]]
combinations n xs = filter ((n==).length) $ powerset xs -- 1)
のように定義出来ます。しかしこれではpowersetがn個以上の要素を含むリストを生成してしまうように思えます。
それをさせない為には、
combinations 0 _ = [[]]
combinations _ [] = []
combinations n (x:xs) = one ++ other
where one = [(x:ys)|ys<-(combinations(n-1)xs)]
other = combinations n xs -- 2)
のように定義する必要があります。ここで1)のコードの評価順序をうまいこと制御できれば、
((n==).length)が集合の要素がn個を越えた時点でその集合を弾いてくれるようになり、
2)のように定義しなくても良くなると思うのです。
0591デフォルトの名無しさん
2012/08/30(木) 22:08:21.96うまいこと範囲を狭めようとするのは本末転倒な気がする
話は逸れるがTMTOWTDIってのも馬鹿正直に全ての方法を吟味する事に意味があると思った
0592デフォルトの名無しさん
2012/08/30(木) 23:49:28.03powersetの結果の一部だけ評価したいんだろうけど、
それだと[[a]]を返すのはあんまり適してない
リストを部分的に探索するには、
「先頭から適当なところまで読んで以降を捨てる」
という方法しかない
もっと賢い打ち切りをしたければもっと複雑な木構造を使う必要がある
この例ならTrieみたいな奴でok
http://ideone.com/GYpdW
0593デフォルトの名無しさん
2012/08/31(金) 11:18:29.77全てを一気に処理するわけでなく、必要に応じて部分的に遅延評価します
結局処理されず仕舞いの部分がありえます
各々の部分はいつ評価されるか判らないのです
こういった事例では
遅延読み込みは危険だと認識しております
一度正格読み込みをし、配列等にプールしておき、そこから遅延評価すべきですか?
0594デフォルトの名無しさん
2012/08/31(金) 11:43:02.920595デフォルトの名無しさん
2012/08/31(金) 11:54:18.830596デフォルトの名無しさん
2012/08/31(金) 12:08:48.660597593
2012/08/31(金) 12:37:16.37つまりずっとファイル開いとかないといけませんよね
これって良くないと思うのですが
0598デフォルトの名無しさん
2012/08/31(金) 12:37:49.07そういった事例で遅延読み込みがなぜ危険なのか、あなたの認識を教えてほしい。
0599593
2012/08/31(金) 13:20:00.92実はどういう時に遅延読み込みが危険かよく理解してないのです(´・ω・`)
0600デフォルトの名無しさん
2012/08/31(金) 13:33:10.62ファイルを開きっぱなしが嫌なら、
ファイルのポインターなどを持っていて遅延で実際にある部分を読むときだけ開いたら?
0601593
2012/08/31(金) 15:18:58.600602デフォルトの名無しさん
2012/08/31(金) 16:26:01.85普通の手続き型でも大抵の場合必要になったら読み込んでるわけで
むしろ正格読み込みで初めに一気に読み込む方が珍しいんじゃなかろうか
0603593
2012/08/31(金) 20:25:42.490604デフォルトの名無しさん
2012/09/01(土) 10:13:06.28ディスクアクセスの時間はバカにならんので
実は最初に全部読んでメモリに置いた方が
一部しか使わなくても速いことだってあるぞ
0605デフォルトの名無しさん
2012/09/01(土) 10:56:45.84関数型との違いは副作用があるかどうかという点だけ
例えば手続き型で read_line () とかが呼び出されるまではファイルを読まないが
呼び出すと毎回違う値が返ってくる
0606デフォルトの名無しさん
2012/09/01(土) 10:57:39.87一部しか使わなくても速いことだってあるぞ
0607デフォルトの名無しさん
2012/09/01(土) 11:16:08.88全部読むにしてもpipe一つ引っ付けるだけでいいし
0608デフォルトの名無しさん
2012/09/01(土) 11:23:38.89確かに速いこともあるがもし入力が無限だったら無限に遅くなる
無限のリストを許しているのだから無限の入出力を禁止するわけにもいかない
0609デフォルトの名無しさん
2012/09/01(土) 11:37:58.050610デフォルトの名無しさん
2012/09/01(土) 11:40:15.18異なる名前を付ける
0611デフォルトの名無しさん
2012/09/01(土) 11:41:22.72型名を接頭語につける
0612デフォルトの名無しさん
2012/09/01(土) 11:41:50.29full importしない
0613デフォルトの名無しさん
2012/09/01(土) 11:43:47.210614デフォルトの名無しさん
2012/09/01(土) 11:44:36.49あんまりよくないよね
0615デフォルトの名無しさん
2012/09/01(土) 11:52:06.87>>609が言ってるのはemptyとかsingletonのたぐいだと思うけど
0616デフォルトの名無しさん
2012/09/01(土) 12:00:33.35import Data.Set (Set)
って二行目がいるのが面倒
モジュール名としての文脈ならばモジュール名のSet
型としての文脈なら型としてのSetと解釈して欲しい
そこまでいかなくともAgdaのモジュールシステムぐらい柔軟にやってほしい
0617デフォルトの名無しさん
2012/09/01(土) 12:00:48.54内部の値を自由にいじらせても型さえ合っていれば問題ないという建前なのでは?
型が合ってたら安全っていうのを論破できる奴は少数派だろ
0618デフォルトの名無しさん
2012/09/01(土) 12:52:18.15さすが2chだわ
0619デフォルトの名無しさん
2012/09/01(土) 13:21:23.98ポインタと配列が似ているような感じ
0620デフォルトの名無しさん
2012/09/01(土) 13:23:48.79先生、お待ちしておりました
ナイーブな理解の我々にどうか光を照らして下さい
0621デフォルトの名無しさん
2012/09/01(土) 20:30:12.900622デフォルトの名無しさん
2012/09/01(土) 20:30:51.820623デフォルトの名無しさん
2012/09/01(土) 21:24:07.13「安全」と「問題ない」では全然違う
例えば内部状態公開しちゃうと、後から変えるのが難しくなる
0624デフォルトの名無しさん
2012/09/01(土) 22:09:23.37破壊的な変更が難しくなるのは良いことじゃないか
例えば型クラスを使うならインスタンスを後で変えるのではなく
新たに別のインスタンスを定義するべきだ
0625デフォルトの名無しさん
2012/09/01(土) 22:14:08.35内部表現を閉じ込めるため
内部表現を変更したとしても、その型を利用するコードは変更せずにすむ
内部表現に依存したコードは、内部表現を変更したら、同時に変更する必要がある
0626デフォルトの名無しさん
2012/09/01(土) 22:31:32.670627デフォルトの名無しさん
2012/09/01(土) 22:36:30.810628デフォルトの名無しさん
2012/09/01(土) 22:39:55.67・・・Typeableがderive以外許されなくなるのはいつですか?
0629デフォルトの名無しさん
2012/09/01(土) 23:32:19.37プログラムは書かないけど型だけ考えるってレベルが役に立つ可能性はもうないのかね
0630デフォルトの名無しさん
2012/09/01(土) 23:38:49.170631デフォルトの名無しさん
2012/09/02(日) 02:48:45.96オブジェクト指向プログラミングでいう開放・閉鎖原則
「モジュールは修正に対して閉じていなければならない」
関数型プログラミングで何て言うのかは知らんけど、
たぶん普遍性があるはず
0632デフォルトの名無しさん
2012/09/02(日) 06:49:07.82追加と削除だけでいいと言うかも知れないし
追加だけでいいと言うかも知れない
この状況で普遍性があるってのは全く意味がわからない
0633デフォルトの名無しさん
2012/09/02(日) 08:10:36.180634デフォルトの名無しさん
2012/09/02(日) 11:41:20.33修正に対して閉じた⊆より弱い事前条件
拡張に対して開く⊆より強い事後条件
0635デフォルトの名無しさん
2012/09/02(日) 12:17:16.98class Fluffy f where
furry :: (a -> b) -> f a -> f b
instance Fluffy ((->) t) where
furry = error "todo"
(->) t って何者なの?
0636デフォルトの名無しさん
2012/09/02(日) 14:54:51.61は
a -> b
0637デフォルトの名無しさん
2012/09/02(日) 17:08:02.050638デフォルトの名無しさん
2012/09/02(日) 17:09:19.370639デフォルトの名無しさん
2012/09/02(日) 17:14:46.800640デフォルトの名無しさん
2012/09/02(日) 17:42:54.79parseTest (many (oneOf "abcdef,") `sepBy` char ',') "abc,def"
["abc,def"]
区切り文字は使っちゃ駄目なのね
第一項のパーサから一々区切り文字を除外しなきゃいけないのは冗長な気がする
0641デフォルトの名無しさん
2012/09/02(日) 18:40:46.87sepByで区切られる個々のフィールドに区切り文字が出現すること自体は普通にある
> parseTest ((char '(' *> many (oneOf "abcdefgh,") <* char ')') `sepBy` char ',') "(abc,def),(gh)"
["abc,def","gh"]
0642デフォルトの名無しさん
2012/09/02(日) 19:02:55.36(*>)と(<*)しゅごい!
between を窓から投げ捨てた!
0643デフォルトの名無しさん
2012/09/02(日) 23:25:56.71実例見てアハ体験するの気持ちいい
ンギモッヂィイイイイッッ!!!!
0644デフォルトの名無しさん
2012/09/03(月) 03:12:44.40気 持 ち 悪 い
0645デフォルトの名無しさん
2012/09/03(月) 22:32:28.560646デフォルトの名無しさん
2012/09/03(月) 22:38:29.59あと、扱うというのがどういう事を指してるのか曖昧。
そして、恐らく「Haskell ByteString 日本語」でググって考えれば、
求めている答えに相当近づくはずだ。
0647デフォルトの名無しさん
2012/09/03(月) 22:55:08.980648デフォルトの名無しさん
2012/09/03(月) 22:59:21.140649デフォルトの名無しさん
2012/09/03(月) 23:40:42.77第2引数が第1引数の入力になるという理解で正しい?
意味的にはf(ta) -> mなの?
0650デフォルトの名無しさん
2012/09/04(火) 07:15:37.26まず初めにライブラリ ドキュメントにあるソースを読むこと。
もしローカル環境にインストールしたドキュメントにソースへのリンクがなくても、
Hackage のサイトにはたいていのライブラリでソースも載ってるから。
Data.Foldable.hs にある Foldable クラスの定義を見てみると、
次のようにデフォルトの実装が書かれている。
class Foldable t where
foldMap :: Monoid m => (a -> m) -> t a -> m
foldMap f = foldr (mappend . f) mempty
> 意味的にはf(ta) -> mなの?
すまん、意味的にはの意味がよく分からん。
意味的も何も、この定義が全てを語ってると思うが・・・
0651デフォルトの名無しさん
2012/09/04(火) 09:16:21.47↓ここの冒頭にあるインスタンス定義例を見ると分かるよ。
ttp://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Foldable.html
だから「意味的にはf(ta) -> mなの?」は違う。fに求められてる定義からして合わないけどね。
0652デフォルトの名無しさん
2012/09/05(水) 15:31:34.11ghcはこれを読んでHaskell 内部文字列データに変換するのですか?
0653デフォルトの名無しさん
2012/09/05(水) 22:33:29.810654デフォルトの名無しさん
2012/09/05(水) 22:37:46.260655デフォルトの名無しさん
2012/09/05(水) 22:48:08.880656デフォルトの名無しさん
2012/09/05(水) 22:51:14.87この型の評価順序がわかりません
0657デフォルトの名無しさん
2012/09/05(水) 23:17:24.700658デフォルトの名無しさん
2012/09/05(水) 23:36:45.54もうだめだー!
0659デフォルトの名無しさん
2012/09/05(水) 23:47:51.560660デフォルトの名無しさん
2012/09/06(木) 07:06:57.80そもそも、型に評価順序なんてありません。
評価順は関数の定義によります。
(だから >>657 は完全に嫌みでしょうね)
その型の関数を使って例えば print (f a b) を評価した場合に、
関数の定義によっては a b の順に評価されるかも知れないし、
b a の順に評価されるかも知れないし、a は評価されないかも知れない。
様々なことが考えられます。
0661デフォルトの名無しさん
2012/09/06(木) 09:37:20.600662デフォルトの名無しさん
2012/09/06(木) 10:57:28.34If p fails and consumes some input, so does lookAhead.
この so does は fails のみに掛かってるのですか?
それとも fails と consumes の両方に掛かってるのですか?
0663デフォルトの名無しさん
2012/09/06(木) 11:28:55.19プログラムの動作で判断して
0664デフォルトの名無しさん
2012/09/06(木) 11:59:32.63結局コードを読むか自分で書くかしないと分からない英文ってのもあるから
0665デフォルトの名無しさん
2012/09/06(木) 12:19:02.340666デフォルトの名無しさん
2012/09/06(木) 12:37:50.090667デフォルトの名無しさん
2012/09/06(木) 14:10:26.760668デフォルトの名無しさん
2012/09/06(木) 15:28:46.82イグザグトリィッ!
0669デフォルトの名無しさん
2012/09/06(木) 22:14:03.2048時間でSchemeを書こう
ttp://ja.wikibooks.org/wiki/48%E6%99%82%E9%96%93%E3%81%A7Scheme%E3%82%92%E6%9B%B8%E3%81%93%E3%81%86
0670デフォルトの名無しさん
2012/09/06(木) 22:23:53.090671デフォルトの名無しさん
2012/09/06(木) 23:03:30.83IORefを使ったら処理が悉くIOアクションになってしまってなんか悲しい
せっかくだから、一般化set!とか、call/ccとか、その他諸々をきっちり実装したいな
0672デフォルトの名無しさん
2012/09/06(木) 23:24:27.880673デフォルトの名無しさん
2012/09/07(金) 00:06:31.49「モナドとは簡単な概念に難しい名前がついているだけです。」
www
0674デフォルトの名無しさん
2012/09/07(金) 00:09:02.920675デフォルトの名無しさん
2012/09/07(金) 02:23:07.740676デフォルトの名無しさん
2012/09/07(金) 02:30:32.23schemeって文法セットがすごく小さいんじゃなかったっけ。wikiとかに載ってるんじゃないかな
0677デフォルトの名無しさん
2012/09/07(金) 02:53:08.03フルセットのSchemeは楽と呼べるほど簡単でもないと思う
0678デフォルトの名無しさん
2012/09/07(金) 07:43:15.880679デフォルトの名無しさん
2012/09/07(金) 07:47:51.370680デフォルトの名無しさん
2012/09/07(金) 14:12:59.23自分のモジュール名で修飾すればいいですが冗長な気がします
This.みたいな修飾ができないものでしょうか
0681デフォルトの名無しさん
2012/09/07(金) 15:29:16.000682デフォルトの名無しさん
2012/09/07(金) 18:53:43.090683デフォルトの名無しさん
2012/09/07(金) 19:08:55.030684デフォルトの名無しさん
2012/09/07(金) 19:32:57.950685デフォルトの名無しさん
2012/09/07(金) 19:56:21.800686デフォルトの名無しさん
2012/09/08(土) 02:24:00.86インポートするときに自分で省略形を决める
なんだかんだ言って省略しない方が良かったりするのは同意
0687デフォルトの名無しさん
2012/09/08(土) 02:28:22.390688デフォルトの名無しさん
2012/09/08(土) 03:15:43.870689デフォルトの名無しさん
2012/09/08(土) 04:02:35.60自分のモジュールインポートするときに名前指定できなかったっけ?
SOURCE と boot で
0690デフォルトの名無しさん
2012/09/08(土) 12:34:51.91import {-# SOURCE #-} Test As T
0691デフォルトの名無しさん
2012/09/08(土) 14:59:56.680692デフォルトの名無しさん
2012/09/08(土) 15:26:05.94おおこれは面白そうだ
でもS式パーサ位ジェネレータ使わずに書きたい
0693デフォルトの名無しさん
2012/09/08(土) 16:07:29.54内容はいいんだけど、次のページに進むリンク設けて欲しい。作り忘れかな
0694デフォルトの名無しさん
2012/09/08(土) 17:06:48.030695デフォルトの名無しさん
2012/09/08(土) 18:05:20.060696デフォルトの名無しさん
2012/09/08(土) 18:44:15.82今のGHCではできません。
0697デフォルトの名無しさん
2012/09/08(土) 20:04:45.61え、おれ695じゃないけど、これマジ?
.hs ファイルが長くなってきてどうしようか悩んでたんだけど、、
0698デフォルトの名無しさん
2012/09/08(土) 20:13:01.030699デフォルトの名無しさん
2012/09/08(土) 20:18:27.50ファイルをインクルードできないのなら、モジュールをインポートすればよいのではなくって?
あと、Haskellの仕様ではないが、ghcからCプリプロセッサを呼べば、ファイルのインクルードもできると思う
0700デフォルトの名無しさん
2012/09/08(土) 23:08:50.890701デフォルトの名無しさん
2012/09/08(土) 23:09:58.880702デフォルトの名無しさん
2012/09/08(土) 23:42:29.66ちょっと想像できない。
Haskellでプログラムするの辛いの?
0703デフォルトの名無しさん
2012/09/09(日) 02:43:53.940704デフォルトの名無しさん
2012/09/09(日) 03:05:10.410705デフォルトの名無しさん
2012/09/09(日) 07:59:37.650706デフォルトの名無しさん
2012/09/09(日) 15:00:24.27Lambda-caseは便利そう
0707デフォルトの名無しさん
2012/09/10(月) 23:11:10.73f (a -> b)は、文脈中の関数
ここでの文脈の厳密な定義ってなんなの?
0708デフォルトの名無しさん
2012/09/10(月) 23:41:12.680709デフォルトの名無しさん
2012/09/11(火) 00:05:06.950710デフォルトの名無しさん
2012/09/11(火) 10:46:08.58main = getContents >>= (return . length . lines) >>= (putStrLn . show)
自分は、これは各行が短い場合はlengthがすぐlinesのリストの要素を捨ててくれるので何とかなるが、
数GBとかの長大な行の入力が合った場合、その分、つまり一行分のメモリを食ってしまうのではないかと思いました。
というのも、linesとlengthが別個にコンパイルされてオブジェクトコードになっているなら、
lengthがリストの要素を捨てられるのはlinesが一つの要素を確定してからになるのではないかと思ったからです。
しかし、そんなことはないようです。ghcはどんな仕組みでメモリ消費量を抑えているのでしょうか。
0711デフォルトの名無しさん
2012/09/11(火) 19:38:06.70> linesとlengthが別個にコンパイルされてオブジェクトコードになっているなら
ここで言うオブジェクトコードというのが、
gcc がリンクするためのオブジェクトコードという意味なら、それはないと思う。
ライブラリが個々にオブジェクトコードになってたら、インラインできん。
で、本題だが
lines 関数のソースを見ると、__GLASGOW_HASKELL__ の場合、
String型のリストを作るのに遅延パターンを使っている。
これがメモリ消費量が抑えられている肝になるのではないかと思う。
試しに、遅延パターンを使わない方の lines 関数を自作してやってみてくれないか。
これでメモリ消費が明らかに増えれば、遅延パターンの恩恵だと言えそうだ。
ハズレかも知れんがな。
0712711
2012/09/11(火) 19:58:31.220713711
2012/09/11(火) 20:29:00.92length 関数は引数が [] にマッチするか (_:xs) にマッチするかだけを見ている。
その引数である lines 関数は、その内部で
文字列を \n の前と後で分けるために break 関数を使っている。
その break 関数の型は、次の定義になっている。
break :: (a -> Bool) -> [a] -> ([a],[a])
break _ xs@[] = (xs, xs)
break p xs@(x:xs')
| p x = ([],xs)
| otherwise = let (ys,zs) = break p xs' in (x:ys,zs)
ここで、break 関数の戻り値てであるタプルの第1要素の「内容」が必要であれば、
in (x:ys,zs) の部分の x:ys によって、メモリがどんどん使われる。
しかし、今回は内容は一切使われていない。
と言うのも、lines 関数の中では break 関数の戻り値であるタプル (x:y) を
x:y というリストに変換して返している。
このリストは length 関数の引数に渡されるが、
リストという形になっているかどうかしか見ていないため、
break 関数の x:ys が使われていない。
よって、文字列の全てをスキャンすることはするが、
スキャンした結果の文字列はメモリに保存されてはいないため、
結果してメモリ消費量が抑えられたと思われる。
文字で説明するのは難しいな。
length、lines、break それぞれの関数をよく見れば、分かると思う。
0715デフォルトの名無しさん
2012/09/11(火) 20:31:58.14こうかな?
0716711
2012/09/11(火) 20:35:16.89あわわ ごめん
大きな間違いをもういとつ訂正。
> lines 関数の中では break 関数の戻り値であるタプル (x:y) を
> x:y というリストに変換して返している。
lines 関数の中では break 関数の戻り値であるタプル (x:y) を
x:(y の次の文字から再び lines) というリストに変換して返している。
あと、lines 関数のソースに __GLASGOW_HASKELL__ ではない定義もあるけど、
そちらでも同じ事。
・・・スレを汚してしまった
逝ってくる
0717デフォルトの名無しさん
2012/09/11(火) 20:55:33.69似たような話が ふつうのH に載ってた気がする
0718デフォルトの名無しさん
2012/09/12(水) 00:07:43.22ここの内容の邦訳ってないのですか?
0719デフォルトの名無しさん
2012/09/12(水) 00:30:09.97目が悪いのか、それとも頭が悪いのか。両方か。
0720デフォルトの名無しさん
2012/09/12(水) 00:46:18.770721デフォルトの名無しさん
2012/09/12(水) 00:50:12.89ttp://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96
0722デフォルトの名無しさん
2012/09/12(水) 00:52:10.29そりゃ独創性なんか生まれるわけないわな。ちっさ。
0723デフォルトの名無しさん
2012/09/12(水) 01:04:26.160724デフォルトの名無しさん
2012/09/12(水) 02:16:36.140725デフォルトの名無しさん
2012/09/12(水) 02:29:14.650726デフォルトの名無しさん
2012/09/12(水) 02:58:23.550727デフォルトの名無しさん
2012/09/12(水) 07:08:44.61>>722 のように思って何もしない奴とでは、今後の成長に差が出そう
0728デフォルトの名無しさん
2012/09/12(水) 07:51:38.120729デフォルトの名無しさん
2012/09/12(水) 07:53:24.62何と戦ってるのか知らんが。
0730デフォルトの名無しさん
2012/09/12(水) 08:04:52.79本当に多いのかな?
どうやって多いことを示したのだろうか?
0731デフォルトの名無しさん
2012/09/12(水) 08:07:03.970732デフォルトの名無しさん
2012/09/12(水) 08:26:09.55なぜプログラム板にいるのかってことだ
0733デフォルトの名無しさん
2012/09/12(水) 08:31:54.50どうして一方を立てれば他方が立たないと思ったのでしょうか?
0734デフォルトの名無しさん
2012/09/12(水) 08:53:36.560735デフォルトの名無しさん
2012/09/12(水) 09:29:01.800736710
2012/09/12(水) 10:13:45.76ありがとうございます。ちょっと自分ではまだ解明を進められていません。すいません。
確かに遅延評価を行っているなら最終的に各々の値が必要なのか分かっている状態になってから計算を始めるので、
ある値を計算する段階で必要ではない値は計算しない事で
(x:ys)のような不必要な値を残さない事が可能である事は理解できます。
ただ、それを実際どのように実現しているのか不思議に思いました。
というのも、haskellはコンパイラ言語であるので最終的に機械語の状態で解釈され計算を行うはずです。
ここでもしlengthやlinesが完全に機械語に変換されているならばlengthがlinesに実はその値は要らないんだ、
という事を知らせる事は不可能ではないかと思ったのからです。
今はいくつかの可能性を考えています。
一つはガーベージコレクタなどのメモリ管理モジュールに全てを任せてしまう方法です。
この場合(x:ys)は一応計算されメモリにストアされるものの、lengthが参照していないので、
GCが動作した時に全て破棄されてしまうという可能性です。
もう一つは一つのhaskell関数を幾つもの小さい関数としてオブジェクトファイル(.oファイル)に格納する方法です。
これにより、ある関数内部の必要な計算と不必要な計算を、小関数単位で呼び出す事で呼出側が制御する事が可能になり、
最終的にリンカのみで不必要な計算を排除出来る可能性があります。
まだよく分かって無いので、もうすこし調べてみようと思います。ありがとうございます。
0737デフォルトの名無しさん
2012/09/12(水) 12:42:32.480738デフォルトの名無しさん
2012/09/12(水) 12:50:31.15> 確かに遅延評価を行っているなら最終的に各々の値が必要なのか分かっている状態になってから計算を始めるので、
違うよ。
遅延評価だけど、最終的に各々の値が必要なのかは、その時になってみないと分からないよ。
値が評価されたら、評価された値はメモリに残る。
しばらくメモリに残って、ガベージコレクタが動いたときにもう必要ないなら、
その時点でメモリから消される。
今回の (x:ys) は「評価されなかった」からメモリに残らなかった。
と考えてほぼ間違いない。
Haskell コードは GHC によってどのような C ソースにコンパイルされるかと言うと、
lengthやlinesなどがそのまま完全に機械語に変換されている訳ではない。
いわば中間コードのような形でプログラムがデータ化されている。
まず、その中間コードを「弱頭部正規形」という形に簡約する。
そうすると中間コードの頭の部分だけ明確になって評価可能状態になるから評価する。
で、その頭の部分を評価してるときに、中間コードの残りの部分が必要になる。
必要になったら、また残りの部分を「弱頭部正規形」に簡約し、頭を評価する。
当然、if や case of などので分岐するから、中間コードと言っても、
一列に数珠繋ぎのようになっているわけではない。
またグラフで管理してて、一度簡約した関数は再び簡約処理することは無いし、
本当はもう少し効率よくやってるが、イメージとしてはこんな感じ。
必要なら弱頭部正規形 --> 評価 --> 必要なら弱頭部正規形 --> 評価 --> ・・・
これを繰り返てプログラムを実行することで、遅延評価を実現している。
0739デフォルトの名無しさん
2012/09/12(水) 13:47:36.22パフォーマンス的にどうなんでしょう
0740デフォルトの名無しさん
2012/09/12(水) 14:43:21.89まるまるインタープリタとも違うんだ。
中間コードのようなものとイメージして簡約処理を説明できるけど、
BASICとかC#のような中間コードではない。
あとグラフ簡約がパフォーマンスの要の一つになってる。
0741デフォルトの名無しさん
2012/09/12(水) 15:00:53.46ここのPDFを読むと良い
Implementing Functional Languages
http://research.microsoft.com/en-us/um/people/simonpj/papers/pj-lester-book/
0742710
2012/09/12(水) 18:26:23.26ありがとうございます。
(x:ys)はサンクが作られたが、
lengthが中身を見なかった、つまり評価されなかったので
メモリ消費量が増えなかったと言うことですね
遅延評価の実現方法は興味深いです
>>741の資料を読んでみます
ありがとうございました
0743デフォルトの名無しさん
2012/09/12(水) 19:12:38.150744デフォルトの名無しさん
2012/09/12(水) 19:25:43.73「訳す根性がありません」なら使ってもいいッ!
0745デフォルトの名無しさん
2012/09/12(水) 19:46:43.16ネットで訳すだけでよんだ気持ちになってるのか…
そりゃ、釈迦の言葉がただの呪文になっちゃうのもうなずける
0746デフォルトの名無しさん
2012/09/12(水) 19:48:33.78そんなこと言われても、申し訳ないが私の力ではもうどうすることもできん。
現時点で、実装方法に関してまとまった資料としては
>>741 が一番具体的でわかりやすいと思う。
他の資料は断片的なことしか書かれてなく、それもかなり抽象的だ。
まして、実装に関わる(まともに使える)日本語の資料なんてのは、
私が探した限りでは無かったよ。
あとは、これ以上探るのは諦めるか、日本語資料が出るのを待つか、
納得できなければ資料をなんとか読める程度まで英語力を上げるしかない。
ただ、>>710 の疑問を解消するのに実装方法を知る必要は無いよ。
遅延評価がまともに機能する実装なら、どんなものでも同じ結果だ。
0747デフォルトの名無しさん
2012/09/12(水) 19:51:56.330748デフォルトの名無しさん
2012/09/12(水) 19:55:40.93すまん、何言ってんだか分からん
0749デフォルトの名無しさん
2012/09/12(水) 20:01:41.12それで >>710 の疑問が解消されそうなら、何ページのどこどこにあるとか言って、
もう少し詳しく勧めてやってくれ。
そうすれば立ち読みしたり図書館で読んだりできると思う。
面倒でになければ、その部分だけ要約して解説してあげると喜ぶだろう。
私は生憎とその本を持っていないので薦めることも解説もできん。
0750デフォルトの名無しさん
2012/09/12(水) 20:39:54.75.NETではHaskellの実装が非効率過ぎて無理だったという話を聞いたことがあるんだけれど、何かご存じないですか?
0751デフォルトの名無しさん
2012/09/12(水) 21:29:59.89しらん
が、予想してみると・・・
Haskell コードをバカ正直に中間コードに変換し、
それを .NET 上で動く「Haskell ランタイム」上で解釈するような事をしてたら、
そりゃ実際に動かしてみるまでもなく非効率すぎるだろうと誰もが分かってる。
(ランタイム on ランタイムなんて馬鹿げてる)
従って、そうではなく、GHC が Haskell コードを、
簡約すべき関数情報と簡約する手続きを直接実行する形の C 言語に変換してるように、
Haskell コードを同じような形の C# や MSIL のコードに変換したんじゃないかな。
でも、http://twtrland.com/profile/kazu_yamamoto の
「飲み屋で二人の Simon に・・・」の件にあるように、
CLR はグラフ簡約マシンを作るには機能が足りないそうだ(古い情報だけどね)。
グラフ簡約を実現する部分はクラスを駆使しなければならなかったんだと思う。
グラフ簡約で使うグラフはサンクもポイントするし、そのサンクは GC にも関わる。
よって、Haskell らしさを表現する大部分をクラスを使って実現することになる。
これはもう、ほとんどランタイム on ランタイム状態と言っていいと思う。
グラフ簡約マシンを作るに足らない機能とやらが具体的になんなのか知らんが、
たぶん効率的なポインタ操作関連ではないかと、私は予想する。
0752デフォルトの名無しさん
2012/09/13(木) 00:35:44.370753デフォルトの名無しさん
2012/09/13(木) 16:05:16.54:m+ Control.Applicative.Parameterized
とか。
0754デフォルトの名無しさん
2012/09/14(金) 02:55:34.750755デフォルトの名無しさん
2012/09/14(金) 11:10:52.190756デフォルトの名無しさん
2012/09/14(金) 11:54:43.130757デフォルトの名無しさん
2012/09/14(金) 17:36:14.700758デフォルトの名無しさん
2012/09/14(金) 22:19:48.860759デフォルトの名無しさん
2012/09/14(金) 22:41:05.890760デフォルトの名無しさん
2012/09/14(金) 23:13:53.310761デフォルトの名無しさん
2012/09/15(土) 04:19:58.73何がそんなに怖いんですか。手続き型言語の人は、日本人みたいに平気な顔してるのに
0762デフォルトの名無しさん
2012/09/15(土) 04:22:36.660763デフォルトの名無しさん
2012/09/15(土) 04:28:50.010764デフォルトの名無しさん
2012/09/15(土) 09:26:56.29マックス・ウェーバーの「プロテスタンティズムの倫理と資本主義の精神」でも読んで、
禁欲的なコミュニティが新しいものを作り出す仕組みを勉強してください。
0765デフォルトの名無しさん
2012/09/15(土) 09:40:57.44実はOOPの普及に大きく貢献したのだというITにおける逆説を究明した画期的な論考
(解説 まつもとゆきひろ)
0766デフォルトの名無しさん
2012/09/15(土) 13:34:33.990767デフォルトの名無しさん
2012/09/15(土) 13:41:52.90証明の過程で使われている手法が
非常に強力なツールになることがある。
0768デフォルトの名無しさん
2012/09/15(土) 13:52:18.950769デフォルトの名無しさん
2012/09/15(土) 13:55:43.930770デフォルトの名無しさん
2012/09/15(土) 14:13:55.33そして副作用が無い処理を基礎と置くこと、
このソースコードが理解しやすくなる。
もうひとつは、
0771デフォルトの名無しさん
2012/09/15(土) 14:14:47.640772770
2012/09/15(土) 14:17:06.60単純な話で、副作用があるものと無いものを明確に分けること、
そして副作用が無い処理を基礎と置くこと、
この2点による恩恵が2つある。
ひとつはソースコードが理解しやすくなる事。
もうひとつは副作用が無い処理の部分で最適化を施しやすくなること。
(具体的には、フュージョンとか)
こんな事は関数型以外の言語でも当たり前に取り組んでいることで、
関数型、特に haskell はそれ(副作用の分離)を言語仕様として組み込んでいる、
ただそれだの事。
宗教を持ち出してくる意味が分からない。
0773デフォルトの名無しさん
2012/09/15(土) 14:24:57.350774デフォルトの名無しさん
2012/09/15(土) 14:38:32.29唯一まともな回答をしてくださってありがとうございます
完全に同意です。別にドカタ言語でも当たり前のことですよね
いや、異常に神聖視してる狂った人が大暴れしてたりしてるので
は?何言っちゃんてんのコイツと思った次第です
0775デフォルトの名無しさん
2012/09/15(土) 14:43:19.640776デフォルトの名無しさん
2012/09/15(土) 14:44:28.20別に大したことないのに
0777770
2012/09/15(土) 14:45:22.37そんなのは狂った人だと分かっていながら、
>>761 のような質問を投げてきたのか。
要するにお前は暇だからただ単に嫌みを言いに来ただけではないのか。
もしそうなら狂ってるのはお前だ。
0778デフォルトの名無しさん
2012/09/15(土) 14:47:55.970779デフォルトの名無しさん
2012/09/15(土) 14:48:49.65は?何言っちゃってんのコイツという感じですね
0780デフォルトの名無しさん
2012/09/15(土) 14:49:19.95なにせ彼には日本語が通じなかったので
Haskellerがまともな思考を持ってるか確認するためにこのスレに質問しに来たのですが
やはり彼が例外的に狂ってるだけのようなので安心しました
0781デフォルトの名無しさん
2012/09/15(土) 14:50:34.73悔しくて発狂しちゃったんだろうね
ドカタがリアルでHaskell使いと接点あるわけないから、2chの他スレかな
0782デフォルトの名無しさん
2012/09/15(土) 14:51:52.870783デフォルトの名無しさん
2012/09/15(土) 14:53:00.530784デフォルトの名無しさん
2012/09/15(土) 14:53:55.140785デフォルトの名無しさん
2012/09/15(土) 14:56:04.92は?何言っちゃってんのコイツという感じですね
0786デフォルトの名無しさん
2012/09/15(土) 14:56:35.360787770
2012/09/15(土) 14:58:12.03質問する前に過去レスを読むのは当たり前のことだろ。
過去レスをじっくり読んだら質問する前に答えが得られるはずだ。
安易にバカみたいな質問するな。
そして、あえて質問するにしても、質問の仕方に配慮がなさ過ぎる。
本気で知りたいのなら、もっと丁寧に言葉に気をつけて文を練ろ。
べつに急ぎの質問でもないのだろ。
なら1日くらいよく考えてから質問しろ。
極簡単なこの2点が全くできてないのはわざとか。
俺にはわざととしか思えんが。
どちらにしても、お前も気が狂ってると言われても仕方ないな。
0788デフォルトの名無しさん
2012/09/15(土) 14:59:28.81設計とは何を指していますか?
0789デフォルトの名無しさん
2012/09/15(土) 15:07:04.35普通の人も扱える
ただ、普通の人が扱ったら、普通の人が保守できない設計になってる
0790デフォルトの名無しさん
2012/09/15(土) 15:08:33.690791デフォルトの名無しさん
2012/09/15(土) 15:14:58.05別に急いではないけど、明日に持ち越すほど本気で知りたいとは思ってないです
Haskellerがどんな人達なのか見たかっただけ
だから別にそこまで気を張って質問しようとも思いません
ただHaskellerがあまりに手続き型言語を馬鹿にしていて、
(Haskellを使ってないからって馬鹿にされる筋合いはないし、手続き型言語の方が普通に使えるという事実があるので)
もしかして彼らは現実が見えてないんじゃないかと憤慨したのですが
このスレの何人かはそこまでアホじゃないようなので安心した限りです
0792デフォルトの名無しさん
2012/09/15(土) 15:17:08.780793デフォルトの名無しさん
2012/09/15(土) 15:28:28.20わざわざこういう文章をここに書き込むところが基地外
0794デフォルトの名無しさん
2012/09/15(土) 15:29:27.45事の発端は心無いHaskellerがドカタゲンガーに唾を吐いた事に因るものだ
Haskellerの中にもごろつきはいるので
そいつに虐められた奴がここに恨み節ぶちまけてるんだろう
こういったいざこざはごろつき同士だけで済ませて欲しいもんだ
0795デフォルトの名無しさん
2012/09/15(土) 15:50:14.31京大院生(もちろんロンダ)だから近い将来ドカタになるかもしれないね
うちは情報学研究科だけどプログラミングマニアが来る専攻ではないから
Haskellerがおらず直接言う機会がないから、このスレにいるゴロツキに釘を刺したかったために
そうでない数人が不快な思いをしたことは認める
0796デフォルトの名無しさん
2012/09/15(土) 15:58:02.550797デフォルトの名無しさん
2012/09/15(土) 17:18:15.27と
Haskellが副作用をどうやって扱ってるかも知らないのに有効な批判ができると思ってる奴
が出会えばいざこざが起こるのは必然だな
関わりたくない
0798デフォルトの名無しさん
2012/09/15(土) 17:52:39.532ちゃんねる以下の争いを。
0799デフォルトの名無しさん
2012/09/15(土) 18:18:01.23前者みたいにHaskellのことを説明できないただの権威主義者がいるだけでいざこざは起こるよ
0800デフォルトの名無しさん
2012/09/15(土) 22:53:51.050801デフォルトの名無しさん
2012/09/16(日) 05:39:44.320802デフォルトの名無しさん
2012/09/16(日) 10:29:25.65まず自分で比較検討してみろ。
こんな実験方法でこんな結果が出ましたが妥当でしょうか?
という質問の仕方をしてくれ。
0803デフォルトの名無しさん
2012/09/16(日) 10:43:55.39答える気が無いなら黙ってろよ
0804デフォルトの名無しさん
2012/09/16(日) 10:48:48.34比較検討なんて面倒なんでそっちでやってくれ。
で、どっちが早いか結果だけさっとさ教えてくれ。
それができなきゃレスするな。
という質問だろ?
0805デフォルトの名無しさん
2012/09/16(日) 20:29:08.85(´・ω・`)はい
0806デフォルトの名無しさん
2012/09/17(月) 17:59:46.02様々な型の値を返す関数は
どうやって書けば良いのですか?
0807デフォルトの名無しさん
2012/09/17(月) 18:07:10.860808デフォルトの名無しさん
2012/09/17(月) 22:34:13.35(Ord b)=> (a->b)->[a]->a
型の関数ってどっかにないの?
0809デフォルトの名無しさん
2012/09/17(月) 22:46:26.46をもう少しコンパクトに書ければいいが
0810デフォルトの名無しさん
2012/09/17(月) 23:24:10.76minBy, maxBy::(a->b)->a->a->a
とか需要あると思うんだけど、案外用意されてないんですね…
0811デフォルトの名無しさん
2012/09/17(月) 23:30:30.84もちろん、もっとコンパクトにした方が意味をくみ取りやすいのなら、そうすべきだが。
0812デフォルトの名無しさん
2012/09/17(月) 23:35:45.92{-# LANGUAGE NoMonomorphismRestriction #-}
import Data.List
import Data.Ord
maximumWith = maximumBy . comparing
こんなん出ました。
死ね、単相性制限。
0813デフォルトの名無しさん
2012/09/17(月) 23:45:14.99型宣言を省略するからそういう事になる
0814デフォルトの名無しさん
2012/09/17(月) 23:56:16.16import Data.List (maximumBy)
maximumWith :: Ord b => (a -> b) -> [a] -> a
maximumWith f = maximumBy $ on compare f
このfを消したくなるのは病気
0815デフォルトの名無しさん
2012/09/18(火) 00:03:41.760816デフォルトの名無しさん
2012/09/18(火) 00:05:56.26自分の頭ではmaximumFとかmaximum'とか本当に酷いのしか思い浮かばなかった
0817デフォルトの名無しさん
2012/09/18(火) 00:09:00.120818デフォルトの名無しさん
2012/09/18(火) 00:09:53.02> このfを消したくなるのは病気
maximumWith = (maximumBy .) $ on compare
と、ついやってしまうって事?
それなら確かに病気だ
0819デフォルトの名無しさん
2012/09/18(火) 13:43:41.260820デフォルトの名無しさん
2012/09/19(水) 00:09:53.82動的型を制限、オブジェクトに制限
こうやって複雑さを増やすコードに制限をもうけることで大規模なプログラムが作りやすくなる。
0821デフォルトの名無しさん
2012/09/19(水) 00:11:51.04SE Linuxみたいで拒否反応ががが。
0822デフォルトの名無しさん
2012/09/19(水) 01:06:09.10言語仕様で制限された機能を実現するプログラムを作るための教育コストを考えてほしい
0823デフォルトの名無しさん
2012/09/19(水) 07:14:44.19なんで必要な機能がデフォルトで制限されている、あるいは無いHaskellの
プログラマを教育しようとするの。
その機能が必要だと分かっているのなら C/C++ のプログラマを教育すればいいじゃん。
Javaで十分ならJavaプログラマを教育すればいいわけだし。
Haskellでプログラムする必要性がなければ、
無理に制限された機能を実現する必要は無いんだぞ。
0824デフォルトの名無しさん
2012/09/19(水) 07:50:36.00具体的にくわしく
0825デフォルトの名無しさん
2012/09/19(水) 16:17:46.79goto
0826デフォルトの名無しさん
2012/09/19(水) 18:53:43.420827デフォルトの名無しさん
2012/09/19(水) 19:27:06.56どういう状況で goto がなくて困った?
>>826
どのような状況で Monomorphism Restriction がなくて困ったのでしょうか。
0828806
2012/09/19(水) 19:59:36.28ありがとうございます
取り合えずこんなのを書いてみたんですがダメでした……
{-# LANGUAGE FlexibleInstances #-}
class FilterContext a
instance FilterContext [a]
instance FilterContext ([a], [a])
filter' :: (FilterContext b) => (a -> Bool) -> [a] -> b
filter' = filter
filter' p xs = (ts, fs)
where ts = filter p xs
fs = filter (not.p) xs
0829デフォルトの名無しさん
2012/09/19(水) 22:01:27.550830デフォルトの名無しさん
2012/09/19(水) 22:06:30.41意味が分からない
0831デフォルトの名無しさん
2012/09/19(水) 22:38:01.25filter'をclass FilterContextのメソッドにしろ。
それぞれのインスタンス宣言で実体を定義しろ。
0832デフォルトの名無しさん
2012/09/19(水) 22:42:44.87import Prelude hiding (filter)
import qualified Prelude
type family Elem a :: *
type instance Elem [a] = a
type instance Elem ([a],[a]) = a
class FilterContext b where
filter :: (Elem b ~ a) => (a -> Bool) -> [a] -> b
instance FilterContext [a] where
filter = Prelude.filter
instance FilterContext ([a],[a]) where
filter p xs = (ts, fs)
where ts = filter p xs
fs = filter (not.p) xs
こういう事がやりたいんだろうか
一々型アノテーション付けるの面倒じゃないかなぁ・・・
0833デフォルトの名無しさん
2012/09/20(木) 01:12:30.86関数の途中で未処理の計算を保存したまま一旦プロンプトを出して問い合わせ処理を行いたいときにgotoがなくて困った
0834デフォルトの名無しさん
2012/09/20(木) 01:20:19.180835デフォルトの名無しさん
2012/09/20(木) 05:27:58.43Continuation の教育コストを考えてほしい
0836デフォルトの名無しさん
2012/09/20(木) 07:15:09.59教育を受ける人のやる気とか能力による。
普通に Haskell で何かアプリを作れる人なら、
全く苦にならずに理解できる。
0837806
2012/09/20(木) 14:49:01.48ありがとうございます、うまくいきました
type familyとかtype instanceとか、(Elem b ~ a)は
haskell 2010 language reportに無いような気がするのですが、GHC独自の拡張ですか?
type familyとtype instanceについてはGHC users guidの7.7に説明が見つけられたのですが、
(Elem b ~ a)はどういう意味なんでしょうか。
型アノテーションについてですが、確かにそうなんですが、
内部のあまり直接触れないものであるけど、最適化の為にまとめた方が良いような処理の場合、
複数の関数を作るよりまとめてしまったほうがいいかな、と思ってこういう事に興味を持ちました。
内部で用いる場合は大体letなどの代入で用いるので、その場合は型アノテーションは省略出来る事も多いと思い、
関数名が減る利点のみを得られるかと思います。
しかしなんか型システムを騙すために色々やらなきゃならないんですね……
0838デフォルトの名無しさん
2012/09/21(金) 16:43:10.99ただまあ832の例は関数従属と多引数型クラスでも複雑にはならない
{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, FunctionalDependencies #-}
module Mult where
import Prelude hiding (filter)
import qualified Prelude as P
import qualified Data.List as L
class FilterContext a b | b -> a where
filter :: (a -> Bool) -> [a] -> b
instance FilterContext a [a] where
filter = P.filter
instance FilterContext a ([a], [a]) where
filter = L.partition
*> filter (> 5) [1..10] :: [Int]
[6,7,8,9,10]
*> filter (> 5) [1..10] :: ([Int], [Int])
([6,7,8,9,10],[1,2,3,4,5])
0839デフォルトの名無しさん
2012/09/21(金) 23:33:42.96断言するが、プログラマのやる気と能力を必須とする言語はウンコ
0840デフォルトの名無しさん
2012/09/21(金) 23:47:50.17縦列駐車もおぼつかないクズが、F1マシンをウンコと言ってるようなもんだな(´・ω・`)
0841デフォルトの名無しさん
2012/09/21(金) 23:48:10.760842デフォルトの名無しさん
2012/09/21(金) 23:57:06.43それがどうかしたか?
嫌ならHaskellやめろよ
0843デフォルトの名無しさん
2012/09/22(土) 00:50:34.39断言するが、日本の公道に置いてあるF1マシンはウンコ
0844デフォルトの名無しさん
2012/09/22(土) 00:51:50.24だったら、法律でHaskell言語を指定して注文を出すのを禁止すべき
特に大学
大学なんだから自分たちで作れ!!!
0845デフォルトの名無しさん
2012/09/22(土) 01:02:15.710846デフォルトの名無しさん
2012/09/22(土) 01:17:36.38皆乗りこなしてるから安心しろw
0847デフォルトの名無しさん
2012/09/22(土) 02:44:58.71使うときにaの型がはっきりしていれば、関数従属いらないよね
*Mult> filter (> (5::Int)) [1..10] :: [Int]
[6,7,8,9,10]
*Mult> filter (> (5::Int)) [1..10] :: ([Int], [Int])
([6,7,8,9,10],[1,2,3,4,5])
だから、この問題に関数従属が必須とはいえないが… たしかに使えば便利かも… 悩む
0848デフォルトの名無しさん
2012/09/23(日) 01:26:55.71簡単な問題は、大抵の言語で解ける。
解くべき問題が難しい場合は、まず解くための記述力が優先であって、扱いやすさは熟れた後から付いてくるもの。
0849デフォルトの名無しさん
2012/09/23(日) 01:50:28.65こういうところが分かりづらかったとか、分からないとか、建設的な話をしようず
0850デフォルトの名無しさん
2012/09/23(日) 04:04:53.830851デフォルトの名無しさん
2012/09/23(日) 08:16:38.240852デフォルトの名無しさん
2012/09/23(日) 09:22:32.71入門書を読ませるのでは駄目なの?
0853デフォルトの名無しさん
2012/09/23(日) 10:32:49.97仮名を知らないやつに漢字を教える方法がわからない
0854デフォルトの名無しさん
2012/09/23(日) 10:42:21.900855デフォルトの名無しさん
2012/09/23(日) 12:10:15.290856デフォルトの名無しさん
2012/09/23(日) 12:15:08.32ついでにマルチ書き込みするバカでもあるな
0857デフォルトの名無しさん
2012/09/23(日) 14:35:44.74使用する言語を自由に選べるソフト会社はごく一部
0858デフォルトの名無しさん
2012/09/23(日) 14:51:30.87>>855はどういう言語なら教育できるのか
なぜそれがHaskellだと通用しないと思うのか
0859デフォルトの名無しさん
2012/09/23(日) 14:52:36.17普通、そのような選択肢の少ない会社は C/C++ か Java か、
せいぜい C# くらいしか選べない。
が、これらはたいてい、少なくともその会社のアプリを作るに当たっては、
教育コストはそれほど高くなく、また実績も数多くあるので、
教育方法が分からないものを現場で使うなんて判断はしない。
0860デフォルトの名無しさん
2012/09/23(日) 14:55:45.78分かりにくくてすまない
>>855 は >>850 の「教育方法が分からない」を受けて
>>852 が言った「教育って現場での教育?」を俺(>>855)が受けてのレスだ。
0862デフォルトの名無しさん
2012/09/23(日) 15:02:00.13言語を使えるようになるメカニズムとか、効率的に教えるor覚えるのはどうするのか、とかよく研究されてるけれど
プログラミング言語でも、そういう研究されてたりするのかな?
0863デフォルトの名無しさん
2012/09/23(日) 15:07:17.26大学の研究室から受注するのはHaskellとかLispが多い
0864デフォルトの名無しさん
2012/09/23(日) 15:11:36.90あ、そうなんだ。
すまん、その辺りは正直よく分からん。
大学関係と仕事したことない。
0865デフォルトの名無しさん
2012/09/23(日) 15:12:20.98Cはシンタックスを覚えさせて、その後、例外処理教えて、その後、開発プロセスの教育に入る
JavaやCobolも同じ
Haskellは例外処理と開発プロセスを教えるときの計算モデルが事例ごとに個別に存在するから教育が難しい
(CやJavaみたいにフローモデルで統一できないので、公理的な原則から演繹する方法がとれない)
0866デフォルトの名無しさん
2012/09/23(日) 17:04:27.55「計算モデル」という言葉をどういう意味で使ってるのかピンとこないけど、
フローモデルというのが制御フロー(フローチャートとか)のことだとすると、
それはHaskellでそのまま通用すると思う
Haskellだと、第二原則として「入力から出力への関数を書く」というのを
制御フローの次にもってくればいいんじゃね
どうせ「公理的な原則から演繹」するだけで書けるプログラムなんてほとんどないんだから
(たとえば、制御フローを気にしてるだけじゃCやJavaでデータ構造は設計できない)
そんなに大きい問題には見えないけどどうだろう
結局、構文を覚えた後はコードを書いてもらって、それをレビューするというのを
繰り返すしかないし、これは言語に関係ない
0867デフォルトの名無しさん
2012/09/23(日) 23:52:03.91ttp://stackoverflow.com/questions/12550276/haskell-debug-print-in-if-block
これもっと早く知りたかったわ
0868デフォルトの名無しさん
2012/09/24(月) 01:46:42.01CやJavaは「こっち行った後にここでこう飛んで…」みたいな感じで、説明できる
つまり、CやJavaのコードを読むことは、どんなトリッキーなコードも結局は、機械語や擬似コードの羅列を上から下に追ってgotoで飛ぶ作業「だけ」に還元できる
Haskellのコードを読むことを、教育者が簡単に提示できる何かの作業「だけ」に還元できるだろうか
0869デフォルトの名無しさん
2012/09/24(月) 07:02:27.96簡約するだけ
0870デフォルトの名無しさん
2012/09/24(月) 12:50:33.66薄いし計算モデルも簡単に説明してるしHaskellのパワーも一通りわかるし
がっつりやらせたければSICPでも読ませとけばいいんじゃね?
0871デフォルトの名無しさん
2012/09/24(月) 13:03:59.29GHCの拡張含めたHaskellの型システム使いこなしのコツ的チュートリアル欲しい……
0872デフォルトの名無しさん
2012/09/24(月) 17:17:29.82ソフトウェア開発で言語そのものの関与は低い。
だからあまり考えられたいないはず。
0873デフォルトの名無しさん
2012/09/24(月) 19:01:21.20型族とかGADTとか関数従属性とか、個々の使い方はチュートリアルで学べるけどね。
俺はどちらかというと、そういう技を見事に活用したライブラリの紹介などの、
ベストプラクティス集みたいなのがほしい。
探しても誰も紹介してないから、仕方なく暇をみつけて
自分でライブラリ漁ってコツコツと使い方コレクションを作ってる。
0874デフォルトの名無しさん
2012/09/25(火) 02:07:42.430875デフォルトの名無しさん
2012/09/25(火) 15:44:53.23うp
0876デフォルトの名無しさん
2012/09/25(火) 19:25:48.94いや、まだ人様にお見せできる状態じゃないよ。
ライブラリのソースと、「abc.hs で**という使い方してる。スゲー」
とか書いたちょっとしたメモとを紐付けして保存してるだけ。
どちらかというと、ぱっと見て気にかかったことを忘れないようにメモってる感じ。
cabal でライブラリをインストールする時はいつも、
インストール処理中にソースをざっと眺めるようにしてるから。
いつか読み返して、他とも関連も併せてちゃんとまとめ直したい。
0877デフォルトの名無しさん
2012/09/25(火) 20:40:09.02コード片と出典と簡単なコメントつけるだけでも
結構需要あるんじゃないかなあ
0878デフォルトの名無しさん
2012/09/25(火) 23:49:47.98Haskell Platform付属のEmacs用haskell-modeってyasnippet.elと相性悪い?
TABがhaskell-modeのインデンテーション補完に取られてyasnippetの$0とか$1の位置に動けない.スニペット展開すると即確定になる.
0879デフォルトの名無しさん
2012/09/27(木) 00:33:24.950880デフォルトの名無しさん
2012/09/27(木) 02:09:08.89男ならメモ帳だろ
0881デフォルトの名無しさん
2012/09/27(木) 09:23:42.820882デフォルトの名無しさん
2012/09/27(木) 16:30:15.23都合が悪い時は黙る。とかね。
0883デフォルトの名無しさん
2012/09/27(木) 19:04:57.900884デフォルトの名無しさん
2012/09/27(木) 22:13:11.000885デフォルトの名無しさん
2012/09/27(木) 23:33:49.860886デフォルトの名無しさん
2012/09/28(金) 01:06:58.110887デフォルトの名無しさん
2012/09/28(金) 11:12:18.81副作用がないならシングルスレッドで簡約した場合と全く同じ結果になるはずだ
0888デフォルトの名無しさん
2012/09/28(金) 17:14:04.320889デフォルトの名無しさん
2012/09/28(金) 23:06:06.940890デフォルトの名無しさん
2012/09/29(土) 13:55:57.95C言語のstructは代数的データ型とは言えないの?
0891デフォルトの名無しさん
2012/09/29(土) 14:40:13.630892デフォルトの名無しさん
2012/09/29(土) 14:43:00.27逆に言えば、代数的構造を持たないのは代数的データ型ではない?
0893デフォルトの名無しさん
2012/09/29(土) 14:50:31.72駄目
間違い
0894デフォルトの名無しさん
2012/09/29(土) 15:31:09.970895デフォルトの名無しさん
2012/09/29(土) 15:38:43.56>>891
0896デフォルトの名無しさん
2012/09/29(土) 16:04:28.53「andとorと再帰的定義」 これと 「代数」 これの関わりを
もう少し説明してくれないだろうか。
Haskellのデータ型でのandとorというのは、次のこと?
(and) => data A = X a b c
(or) => data A X | Y
あと、再帰的定義ができることも分かる。
しかし、どのあたりが代数なのか、俺は他人にちゃんと説明できないんだ。
0898デフォルトの名無しさん
2012/09/29(土) 16:20:08.39代数的データ型の「代数的」な所以は代数のクラスを抽象化するのに
必要十分なだけの情報を持っていることじゃないかな。
例えば、「単位元と二項演算子を一つ持つ」代数のクラスを考えた場合、
data A= Unit | Op A A
という代数データ型があれば
0 + (0 + 0)も
1 + (1 * 1)も
Op Unit (Op Unit Unit)という式に抽象化することができる。
(これが、X |-> 1 + X * X なる関手の始代数である、ということだと思う)
こういう抽象化ができる、というかこういう抽象化によって見出すことができるデータ型が代数的データ型ということ
じゃないかなぁ、というのが勉強を始めてところの今の理解
0899デフォルトの名無しさん
2012/09/29(土) 16:25:42.31代数的構造を持っているのではなくて、
代数的構造を表現できるから代数的データ型なのか。
0900898
2012/09/29(土) 16:33:41.99> 1 + (1 * 1)も
は
> 1 * (1 * 1)も
の誤記。すまん。
ついでに、書いておくと
>>898の例で、
concrete :: (a, a -> a -> a) -> A -> a
concrete (u, _) Unit = u
concrete a@(_, o) (Op x y) = o (concrete a x) (concrete a y)
という関数があれば、Aで作られた抽象的な式を、具体的な式に復元?することもできる。
concrete (0, +) (Op Unit (Op Unit Unit)) === 0 + (0 + 0)
concrete (1, *) (Op Unit (Op Unit Unit)) === 1 * (1 * 1)
0901デフォルトの名無しさん
2012/09/30(日) 00:45:34.84少なくとも統一見解はない。
0902デフォルトの名無しさん
2012/09/30(日) 00:56:45.35一般じゃ無くて、Haskell の data で定義できる型に限ったことでいいよ。
そこにおける「代数的」ってどういう意味、という話。
0903デフォルトの名無しさん
2012/09/30(日) 01:12:40.48代数とは「集合とその集合の上に定義された演算の対」
0904デフォルトの名無しさん
2012/09/30(日) 01:13:42.99○演算の集合
0905デフォルトの名無しさん
2012/09/30(日) 01:18:38.630906デフォルトの名無しさん
2012/09/30(日) 03:54:11.230907デフォルトの名無しさん
2012/09/30(日) 07:40:02.29それだったら抽象データ型の理論から始まったやつだ。
このイントロでも読め
http://ci.nii.ac.jp/naid/110003743901
Goguenが始まりだとさ。
一般興味あるなら
Modern Algebra and the Rise of Mathematical Structures
http://www.amazon.co.jp/dp/3764370025
だな。ただ数学的内容は眉唾な部分があるので気を付けないといかん。
俺はもう読む気しないから誰か読んで。
0908デフォルトの名無しさん
2012/09/30(日) 09:19:08.01おぉ、ありがと。
その論文からいろいろ辿ってみるよ。
> 数学的内容は眉唾な部分があるので
え、どゆこと?
数学的内容の本なんじゃないの?
計算機科学が主で、道具としての数学を解説してる本ってこと?
0909デフォルトの名無しさん
2012/09/30(日) 09:33:01.21計算機科学なんか全く出てこない。数学一般において代数的という言葉が
どういう変遷をたどったかという本だ(と思う)から。
ほんと気になる人向けという意味で上げた。
0910デフォルトの名無しさん
2012/09/30(日) 12:52:53.72代数学の歴史−アル・クワリズミからエミー・ネーターへ−
http://www.gensu.co.jp/book_print.cgi?isbn=978-4-7687-0220-8
が好書。
0911デフォルトの名無しさん
2012/09/30(日) 13:00:55.44http://homepages.abdn.ac.uk/k.vdeemter/pages/teaching/CS4026/abdn.only/haskell6.pdf
0912デフォルトの名無しさん
2012/09/30(日) 15:34:59.220913デフォルトの名無しさん
2012/09/30(日) 16:05:06.03今、話題になってるのはこっち。
0914デフォルトの名無しさん
2012/09/30(日) 16:13:25.090915デフォルトの名無しさん
2012/09/30(日) 20:11:46.33そういうので代替が効くんならわざわざあげないよ。
目次見ろ
http://books.google.co.jp/books?id=WdGbeyehoCoC&pg=PP8&lpg=PP1&hl=ja#v=onepage&q&f=false
それで誰か読み込んでくれ(特に7章)。
0916デフォルトの名無しさん
2012/09/30(日) 20:13:28.950917デフォルトの名無しさん
2012/09/30(日) 20:58:52.21>>910の方がずっと目的にあってるよ。
0918デフォルトの名無しさん
2012/09/30(日) 22:05:54.35単なる構文的等値でない等値性が用意されているのかと誤解した。
「可換的」とか「結合的」とかキーワードが用意されていて、T a (T b c) = T (T a b) cになるとか。
0919デフォルトの名無しさん
2012/09/30(日) 22:36:58.000920デフォルトの名無しさん
2012/10/02(火) 21:41:35.300921デフォルトの名無しさん
2012/10/02(火) 22:11:02.00「Pearls of Functional Algorithm Design」
すばらしい
0922デフォルトの名無しさん
2012/10/03(水) 19:01:20.450923デフォルトの名無しさん
2012/10/03(水) 19:14:56.09退役かどうかは人によるだろ。
使用中のメモリの変化も違うし、計算速度も違う。
自分が書いたプログラムのMapやIntMapを使ってる部分をHashMapに変えて、
プロファイルを取ってみるといい。
0924デフォルトの名無しさん
2012/10/03(水) 20:28:28.600925デフォルトの名無しさん
2012/10/04(木) 22:04:48.83そのものズバリの
"Algorithms: A Functional Programming Approach"
はどうですか?
0926デフォルトの名無しさん
2012/10/04(木) 22:09:02.57C++を15年くらい使ってきました。
そしたら、とある本に
Haskellを使えばコーディング時間がC++の10分の1くらいになるよ
(実行速度はちょっと遅くなるけど)
と書いてあったので、Haskellを使ってみたいと考えています。
C++プログラマーがHaskellを勉強するには、どんな本がオススメでしょうか?
あと、本当にコーディング時間(デバッグ時間を含む)は
10分の1くらいになるのでしょうか?
0927デフォルトの名無しさん
2012/10/04(木) 22:13:42.93静的型付けが役に立つほど仕様が固まってデカイコードなの?
完成品はc++で約何行ぐらい?
0928デフォルトの名無しさん
2012/10/04(木) 22:43:22.44どの言語をやっていようが関係ない
・すごいHaskellたのしく学ぼう!
・Haskell: The Craft of Functional Programming (3rd Edition)
このどちらかの本で学べばいい
ところで、「とある本」とは何だ?
変なところで伏せずに、ちゃんと明かしなさい
>あと、本当にコーディング時間(デバッグ時間を含む)は
>10分の1くらいになるのでしょうか?
個人的には、C++と比較して1/10はかなり言いすぎに思える
体感的には1/2-1/3くらい
もちろん書くコードの種類や、言語の習熟度に強く依存するから、
1/10になるケースがないと主張するつもりはないけど
0930デフォルトの名無しさん
2012/10/04(木) 23:12:47.56コーディング時間が数分の1になっても元は取れないかもしれない
0931デフォルトの名無しさん
2012/10/04(木) 23:18:15.19沢山ありそうだからそれも書くことになる
0932デフォルトの名無しさん
2012/10/04(木) 23:31:31.09実行速度のパフォーマンスが出ないときのチューニングがキツい予感
0933デフォルトの名無しさん
2012/10/04(木) 23:41:16.52たかだか百万エッジ程度のグラフでも色々工夫しないとメモリ不足になるかGCばかり走る状態になる。
0934デフォルトの名無しさん
2012/10/04(木) 23:50:51.67行数はわかりませんが、Hadoopくらいの複雑さを想定しています。
単体法や内点法のような数値計算もガリガリ書いています。
静的型付けが必要かと言われると、ちょっとわかりません。
数値計算部分はmatlabで書いたりするので。
>>928
情報ありがとうございます。
>>929さんも推薦しているので、
craftを買ってみようと思います。
とある本とは、非公開会議の資料なので、伏せさせてください。
>>929
なるほど、1/10は誇張でしたか・・・
でも、仮に半分になったら嬉しいですね。
>>930
なるほど。
ただ、結局は機械語に帰着するので、そんなに違いはないような気もしますが。
>>931
そこは頑張って自作しようかと。
>>932
アセンブラレベルのチューニングはあまり重要視していないので、大丈夫かな・・・たぶん・・・
0935デフォルトの名無しさん
2012/10/04(木) 23:59:26.96・すごいHaskellたのしく学ぼう!
こっちもすごく良さそうですね!!
しかも、日本語なら少しだけ速く読めるので、
こっちがいいのかな・・・悩ましい・・・
0936デフォルトの名無しさん
2012/10/05(金) 00:04:47.480937デフォルトの名無しさん
2012/10/05(金) 00:18:05.89C言語とかにどっぷり浸かってる人なら「ふつうのHaskellプログラミング」もいいと思うよ
0938デフォルトの名無しさん
2012/10/05(金) 03:16:05.67http://www.well-typed.com/blog/70
The New Cloud Haskell
0939デフォルトの名無しさん
2012/10/05(金) 13:22:20.43これ絶版ですかね (´・ω・`)
0940デフォルトの名無しさん
2012/10/06(土) 17:24:41.89Amazon UK でまだ売ってる。
本体は38.99ポンド
通常発送(遅い方)の場合、
Amazon UK の設定するレートなら6196円で買える。
ポンドで買う(カード会社がレート設定する)なら46.97ポンド。
0941デフォルトの名無しさん
2012/10/06(土) 23:21:50.32読んだこと無いけど米密林では評判悪いね
0942デフォルトの名無しさん
2012/10/07(日) 00:48:41.09どちらかというとアルゴリズムを最適化するテクニックを多く学べる感じだ。
第3章からが本番。
関数の簡約の様子が詳しく書かれている。
所々、おまけでヒープの変化の様子を描いた図もある。
Burstall-Darlington 変換の考え方が学べる。
第4章のListの節はなかなか面白かった。
細かな最適化の話なんだが、関数合成時の中間データを省くテクニックや、
計算速度的には余計な結合演算(++)を取り除いたりするテクニックが学べる。
(後者はちょっと目から鱗だった)
あとはTreeやArrayの節でも同じように細かなテクニックが述べられている。
第5章はスタックやヒープなどのデータ構造を表現する方法が学べる。
ここは、個人的にはたいして面白くなかったな。
手続き型言語でよくあるデータ構造を関数型でいかに表現するかという事で、
まぁ実装方法は予想の範囲を超てなく、驚きがなかったから。
ただ、分かりやすくはあった。
第6章はソーティングの話だが、クイックソートよりも
マージソートやヒープソートの方が関数型では適している事が分かる。
各アルゴリズムの比較で、効率の計算が出てくるが、ちょっと難しいな。
なぜその計算になるのかの説明がちょっと簡略気味だ。
ただ、ここでも簡約の様子が図入りで載っているのは理解に助かった。
第7章からは、ちょっと飽きてきて、さらっと斜め読みしかしてない。
0943デフォルトの名無しさん
2012/10/07(日) 00:51:30.99各章毎に最初に「**がしたい」という課題が提示され、
その問題を解決するアルゴリズムをチープなものからハイレベルなものへと
徐々に進化させながら解説する本だ。
各章で、たいていは最初に "specification" と言って、
その問題の解を導く関数が持つべき性質が Haskell の文法で示される。
で、その specification を素直に満たす関数をまず作り、
そして、どこがなぜ非効率なのかを解説しながら少しずつ改良させていくわけだ。
ちになみに、タイトルには無いが、こちらも Haskell の本だよ。
0944デフォルトの名無しさん
2012/10/07(日) 04:00:48.730945デフォルトの名無しさん
2012/10/07(日) 07:18:23.78くわしい解説ありがとう!
0946デフォルトの名無しさん
2012/10/07(日) 08:45:25.66おらなんだか欲しくなってきたぞ
0947デフォルトの名無しさん
2012/10/08(月) 13:12:46.97コンパイルするコードを変える事はできるでしょうか。
例えば、#ifdef #else #endif で分けるとか。
0948デフォルトの名無しさん
2012/10/08(月) 13:42:31.29C Pre-processor はどの言語でも使える嫌われてもいいのならバンバン使えばよい
0949デフォルトの名無しさん
2012/10/08(月) 13:48:13.32最適化オプション有りだとどんな名前のディレクティブが定義されるのでしょうか。
0950デフォルトの名無しさん
2012/10/08(月) 14:14:40.77いや、.hs を c の処理系ならもれなくついてくる cpp にかければいいというだけだ
cpp の持っているディレクティブならなんでも使えるはずだ
http://en.wikipedia.org/wiki/C_preprocessor
嫌われても知らない
0951デフォルトの名無しさん
2012/10/08(月) 14:20:51.34http://www.kotha.net/ghcguide_ja/latest/pragmas.html
http://www.haskell.org/ghc/docs/latest/html/users_guide/pragmas.html
0952デフォルトの名無しさん
2012/10/08(月) 15:30:28.95c の処理系ならもれなくついてくる cpp にかければいいと言いますが、
ghc なら -XCPP オプションを付ければ .hs ファイルの中で #ifdef などが直接使えるので、
あとは最適化オプションを付けたときに、ghc 側でどのようなディレクティブが
自動で定義されるかが分かればできそうです。
それが分からないんですけどね。
>>951
プラグマを使って最適化時にコンパイルするコードを変える方法が
載っていないような気がするのですが、見落としてますでしょうか。
0953デフォルトの名無しさん
2012/10/08(月) 18:58:47.52理論的には、Template Haskellは任意のIOを実行できるので、
OSの機能を使ってGHCに渡されてるオプションを調べたり、
デバッガを起動してGHCのメモリ内容を見たりすることは可能
0954デフォルトの名無しさん
2012/10/08(月) 19:17:41.14CabalとかSetup.hsとかmakeとか。
コンパイラになんでも詰め込んでしまうとろくなことない。
0955デフォルトの名無しさん
2012/10/08(月) 19:31:35.45コンパイラでやるのと Cabal でやるのとで、何か違いがあるのですか?
0956デフォルトの名無しさん
2012/10/09(火) 10:51:23.680957デフォルトの名無しさん
2012/10/09(火) 12:13:42.86/ / バカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ ワッフル ワッフル
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
0958デフォルトの名無しさん
2012/10/09(火) 23:44:17.490959デフォルトの名無しさん
2012/10/09(火) 23:50:18.780960デフォルトの名無しさん
2012/10/10(水) 01:02:17.600961デフォルトの名無しさん
2012/10/10(水) 01:19:14.02起動時間比較 wx3秒。gtk0.5秒
導入の簡単さ wxの方が難しい
GUIコードの長さ wxの方が短い
以上、チラ裏でした
0962デフォルトの名無しさん
2012/10/10(水) 07:04:24.44それよりも、wx は ghci 上で動かないのが痛い
0963デフォルトの名無しさん
2012/10/10(水) 19:52:51.35エラーになってる関数は使っていませんが気にしないでください...
http://ideone.com/BXd8X
なコードが
Hoge.hs:7:18:
Couldn't match expected type `(a0, b0)'
with actual type `Writer w0 a1 -> (a1, w0)'
In the second argument of `($)', namely `runWriter'
In the expression: fst $ runWriter
In an equation for `getValue': getValue = fst $ runWriter
というコンパイルエラーで落ちるのですが,どこが悪いのでしょうか?
runWriterの引数の型を間違えていると読めますが,どうおかしいのか私にはわかりませんでした.
0964デフォルトの名無しさん
2012/10/10(水) 20:19:27.49(fst $) の型は (a, b) -> a だ。
これは、(fst $) は (a, b) 型の値に適用して a 型の値を返す、という意味だ。
あなたのプログラムでは、(fst $) を runWriter に適用している。
では、runWriter の型は (a, b) なのか?
違うよね。
runWriter の型は Writer x y -> (y, x) だ。
(fst $) は (a, b) 型の値に適用することが期待されているのに、
実際のプログラムソースでは (Writer x y -> (y, x)) 型の値に適用しようとしている。
マッチしないよ。
というのがエラーの内容だ。
で、あなたがやりたいことが getValue の型の通りだとするなら、
そこは fst $ runWriter ではなく fst . runWriter なのでは?
0965デフォルトの名無しさん
2012/10/10(水) 20:41:36.50なるほど,ありがとうございます.
格好つけてポイントフリースタイルみたいな書き方をしたが,実際にはポイントフリースタイルと($)を混同していたのがそもそもの問題だったのですね...
0966デフォルトの名無しさん
2012/10/11(木) 06:41:52.69このセクションの発想はなかったわ
0967デフォルトの名無しさん
2012/10/12(金) 09:07:31.800968デフォルトの名無しさん
2012/10/12(金) 10:32:14.340969デフォルトの名無しさん
2012/10/12(金) 17:24:54.690970デフォルトの名無しさん
2012/10/13(土) 03:58:23.47なんせサポートをうたってるのですから
0971デフォルトの名無しさん
2012/10/13(土) 04:03:13.400972デフォルトの名無しさん
2012/10/13(土) 20:58:29.89http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.362
0973デフォルトの名無しさん
2012/10/14(日) 23:38:32.86Haskellに移行したいと思ってます。
Haskellの学習はまだです。
Mathematicaでは次の操作を行って株価の一覧を作成してます。(そのほかにもいろいろな指標を計算してます)
・株式コードからURLを作成する
・URLが指定するWebページのHTMLを取得する
・HTMLから正規表現で現在の株価を抜き出す
これはHaskellでも可能でしょうか?
ライセンスの問題でMathemaricaを使い続けることが難しくなりました。
考え方が近いようなので関数型言語への移行が適切かなと思ってます。
(ExcelVBA版は作ったのですが速度に問題がありました…)
0974デフォルトの名無しさん
2012/10/15(月) 00:37:25.30次の方どうぞ〜
0975デフォルトの名無しさん
2012/10/15(月) 06:57:34.90別に関数型言語じゃなくてもpythonとかperlみたいなLLでいい
0976デフォルトの名無しさん
2012/10/15(月) 08:09:37.270977デフォルトの名無しさん
2012/10/15(月) 08:13:36.070978デフォルトの名無しさん
2012/10/15(月) 08:17:17.710979デフォルトの名無しさん
2012/10/15(月) 08:18:09.000980デフォルトの名無しさん
2012/10/15(月) 08:53:03.35>>977
すいませんでした。
VBAで作り直したとき、Webからのデータ取得や正規表現は
外部からCreateObjectで読み込んだので少し不安でした。
0981デフォルトの名無しさん
2012/10/15(月) 10:50:24.530982デフォルトの名無しさん
2012/10/15(月) 13:22:19.13>ExcelVBA版は作ったのですが速度に問題がありました…
この書き込みで最も有益な情報
0983デフォルトの名無しさん
2012/10/15(月) 23:19:24.680984デフォルトの名無しさん
2012/10/15(月) 23:42:55.22実用的なことを一切やっていない
マジ低脳の極み
Perlが一番最高
こんなくそ言語やって何が楽しいんだ?低脳だろうなこいつら
インテイゲンチャきどっててきもちわりいわ
0985デフォルトの名無しさん
2012/10/16(火) 06:03:39.02webからデータ取得だけならLLで、って意見に同意。
もっともmathmaticaでも関数型プログラミング可能と謳っているからまずは
自分のコード見直してみたら?
Homeライセンスならグアム/サイパンでも行ったときホテルからUSDで買えば安いよ。
0986デフォルトの名無しさん
2012/10/16(火) 19:44:48.95自信のなさの裏返しなのかな?
0987デフォルトの名無しさん
2012/10/16(火) 19:49:46.79他の言語ユーザをdisってるほうが良く見るな
馬鹿には無理、ってね
0988デフォルトの名無しさん
2012/10/16(火) 21:19:33.55「○○言語ならこう書けるのに、なぜこんな書き方をさせるんだ!!!」みたいな。
まったくのプログラミング未経験者ならCやJavaよりむしろ簡単だと思う
0989デフォルトの名無しさん
2012/10/16(火) 21:26:45.580990デフォルトの名無しさん
2012/10/16(火) 22:37:05.09> まったくのプログラミング未経験者ならCやJavaよりむしろ簡単だと思う
それはどうだろうか。
私は、どちらを先に始めたかではなく、それに触れるまのでの間に
どのような考え方に慣れているかに依ると思う。
人はたいてい小学生(あるいはそれ以前)の頃からずっと、
課題を解決するのに「手順」を考える事を学習させられてきた。
その中で、更に「状態変化・状態遷移」の概念も知らず知らずすり込まれる。
問題 X を解決するには A をやると x になって、
それから B をやると y になるから、
最後に C をやればできるよ、というような感じで。
理科の実験手順も、料理のレシピも同じ。
この考え方は C や Java を理解するのに適している。
静的な、宣言的な考え方なんて、手続き的な考え方に比べれば、
学校教育の現場でほとんど出くわすことはないだろう。
たとえ出くわしても、意識しなければ素通りしていくだけで、身にならない。
だから、そんな人間が初めてのプログラミング言語として関数型言語に触れても、
今までの生活では意識してこなかった考え方を求められる事に変わりはない。
手続き的な考え方よりも宣言的な考え方の方により慣れ親しんで初めて、
C や Java より Haskell の方が簡単と感じる可能性が出てくるのだと思う。
0991デフォルトの名無しさん
2012/10/16(火) 23:23:49.590992デフォルトの名無しさん
2012/10/17(水) 00:00:38.66数列の帰納的定義をやらずに終わる高校もあるのかね
0993デフォルトの名無しさん
2012/10/17(水) 00:05:17.59決して手続き型が初心者に易しいわけではない
0994デフォルトの名無しさん
2012/10/17(水) 00:22:23.75ム板の人は特に無頓着な気がする
0995デフォルトの名無しさん
2012/10/17(水) 00:47:21.370996デフォルトの名無しさん
2012/10/17(水) 01:01:42.060997デフォルトの名無しさん
2012/10/17(水) 03:11:20.71日常のなかで宣言的な考え方というのは確かに僅少ですね
最初に出会うのは‥‥数学的帰納法か?
0998デフォルトの名無しさん
2012/10/17(水) 03:44:48.810999デフォルトの名無しさん
2012/10/17(水) 08:10:34.89ttp://toro.2ch.net/test/read.cgi/tech/1350428908/
1000デフォルトの名無しさん
2012/10/17(水) 08:15:46.08スレ立て乙
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。