関数型プログラミング言語Haskell Part9
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/05/17(土) 16:41:29http://www.haskell.org/
日本語サイト
http://www.sampou.org/cgi-bin/haskell.cgi
http://www.shido.info/hs/
過去ログ
関数型プログラミング言語Haskell
Part1 http://pc.2ch.net/tech/kako/996/996131288.html
Part2 http://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 http://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 http://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 http://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 http://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 http://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 http://pc11.2ch.net/test/read.cgi/tech/1193743693/
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
0067デフォルトの名無しさん
2008/05/23(金) 01:04:34数学基礎論がまるで分からないんだね。
0069デフォルトの名無しさん
2008/05/23(金) 07:10:080070デフォルトの名無しさん
2008/05/23(金) 13:34:41沢山あるからどれを読もうか迷ってしまう
このスレ的に、コレは読んでおいて損は無い!って奴あったら教えてくらはい
今のとこ読んだのはImperative functional programmingとLazy vs Strictと
Haskell vs. Ada vs. C++ vs. Awk vs. ...
0071デフォルトの名無しさん
2008/05/23(金) 13:47:070072デフォルトの名無しさん
2008/05/23(金) 13:49:132chは時代遅れ情報しか出てこねーな。noobどもしかいねぇ。
0073デフォルトの名無しさん
2008/05/23(金) 13:53:080074デフォルトの名無しさん
2008/05/23(金) 14:18:52落として読んでみるよー
他にもあったら是非教えてクレクレ
>>72
玄人さん面白かった論文教えて
0075デフォルトの名無しさん
2008/05/23(金) 14:36:10そんな事を言う奴が来るな!
数学なんぞできんでもプログラムはできる!!
0076デフォルトの名無しさん
2008/05/23(金) 14:49:15手続き型にどっぷり浸かった後で関数型言語を触って嵌ってしまったやつは
やつは皆計算機科学の世界に飛び込み二度と帰ってこなくなっちまうものなのさ
「コード書いてるより数式弄くってるほうが楽しいおwwww」
俺の同僚の最後の言葉さ・・・
0077デフォルトの名無しさん
2008/05/23(金) 16:03:560078デフォルトの名無しさん
2008/05/23(金) 18:02:35いまいちメリットが無いんだよなぁ。
前のコードの方が短かったし、arrowにしたせいで複雑になってしまうことも多々ある。
arrowのメリットを具体的に教えてくださいよ。
論文読んでみてもarrowのうまみが伝わってこないんだよね。
0079デフォルトの名無しさん
2008/05/23(金) 18:31:300080デフォルトの名無しさん
2008/05/23(金) 19:12:20arrowを使ったほうが分かりやすいって感じる人も少しはいるでしょうから
そういう人が勝手に使ってればそれでいいんでしょう
008136 ◆K0BqlCB3.k
2008/05/23(金) 19:20:21008236 ◆K0BqlCB3.k
2008/05/23(金) 19:21:010083デフォルトの名無しさん
2008/05/23(金) 19:39:51warrockに帰れwww
0084デフォルトの名無しさん
2008/05/23(金) 19:58:07(モナドと比較した場合)arrowの旨みって、モナドではないがarrowである型があるっていう一点じゃないの?
そういう型を扱うときはarrowの枠組みが便利というだけ
008536 ◆K0BqlCB3.k
2008/05/23(金) 20:07:010086デフォルトの名無しさん
2008/05/23(金) 20:12:53確かにそれは慣れれば便利かもな
でも、Arrow (->)という特定のインスタンスを使ってるだけなら、
>>78が言ってるようなArrowの旨味とは別の話な気がする
0087デフォルトの名無しさん
2008/05/23(金) 23:35:21ちょwwBeautiful Codeって本みながら、たまたまスレ覗いたら、
本の中でソレ紹介されてたぞww
0088デフォルトの名無しさん
2008/05/24(土) 00:10:42解析関係かデバッグ関係
形式証明以外使えそうな分野
無い
0089デフォルトの名無しさん
2008/05/24(土) 04:49:010090デフォルトの名無しさん
2008/05/24(土) 04:59:310091デフォルトの名無しさん
2008/05/24(土) 22:25:11関数型が好きな理由は、所謂プログラミングの面白さがあるからではないな。
0092デフォルトの名無しさん
2008/05/25(日) 00:01:550094デフォルトの名無しさん
2008/05/25(日) 01:33:41do{...}が値を持つ単なる式であるか、という質問ならそのとおり
>>93が言うようにdo式は構文糖で、bind演算子(>>=)の略記
do式の値が(広い意味で)アクションか、という質問ならそのとおり
具体的には、IOモナドに関するdo式なら値はIOアクション、リストモナドならリスト、という具合
0097デフォルトの名無しさん
2008/05/25(日) 03:08:50そういうつもりで書いた
一般的でない用語法だったらすまん
0098デフォルトの名無しさん
2008/05/25(日) 03:28:30Nothing : 計算を即座に終了させるアクション
0099デフォルトの名無しさん
2008/05/25(日) 07:33:241 + 2: 1と2を加えるアクション
0100デフォルトの名無しさん
2008/05/25(日) 09:42:48知識をダイレクトにコード化が可能だと感じますか?
Cなんかだと似ても似つかないものにしないといけませんよね。
数学的なモデルのシュミレーションなんかを記述する際に、
正しく書くのは結構大変じゃないかと思ってしまいます。
そういう点で、Haskellはそのままとは言いませんが書きやすいの
かなぁと。だけど、僕の知人で理系の人たちはC言語使う場合が
多いようです。最大の理由はスピードだそうですが、手間を考えると
早い計算機使ってHaskellで書いた方がいい、という考えの人も
いるんでしょうか。
0101デフォルトの名無しさん
2008/05/25(日) 10:41:40LINPACKが使えるかどうか
それが問題だ
0102デフォルトの名無しさん
2008/05/25(日) 10:49:58関数とアクションは同じものなの?
0103デフォルトの名無しさん
2008/05/25(日) 10:55:25別のものだよ
>>99はネタ(か、たちの悪い誤解)だから真に受けんな
0104デフォルトの名無しさん
2008/05/25(日) 11:19:31氏ねよw
0105デフォルトの名無しさん
2008/05/25(日) 11:24:300か1かみたいな考え方は辞めた方がいいかと。
工学の人は合理的、合目的的に考えるから、適材適所でやります。
速い計算機に、さらに速いソフトウェアがあれば、より計算を回せます。
計算機が速いから、ソフトウェアは遅くていいなんてやり方じゃ、
ライバルに負けてしまいます。遊びならそれでもいいけど。
0106デフォルトの名無しさん
2008/05/25(日) 11:39:540107デフォルトの名無しさん
2008/05/25(日) 12:36:24Maybeとかでも「アクション」ていうの?
0108デフォルトの名無しさん
2008/05/25(日) 12:43:090109デフォルトの名無しさん
2008/05/25(日) 12:43:17関数の外の世界に対して、関数の動きが影響を与えたり、逆の現象が発生
するのがActionであり、IO型であると。
IOがモナドなのは、モナド則に当てはまるから、ってだけではないでしょうか?
0110デフォルトの名無しさん
2008/05/25(日) 13:21:380111デフォルトの名無しさん
2008/05/25(日) 13:24:07そうそう、その時点その時点でのベストを尽くします。そして、過去の仕事に対するリスペクトも忘れません。
0112デフォルトの名無しさん
2008/05/25(日) 15:24:57たとえば
data Hoge = Hoge { x1 :: Word32, x2 :: Word32, x3 :: Word16, x4 :: Word16}
のようなHogeを[Word8]と相互変換する便利な方法ってないでしょうか?
0113デフォルトの名無しさん
2008/05/25(日) 15:29:120114デフォルトの名無しさん
2008/05/25(日) 15:33:25へえ・・・ 何となくおもしろそう
ドキュメントとか読んでみます
0115デフォルトの名無しさん
2008/05/25(日) 15:58:200116デフォルトの名無しさん
2008/05/25(日) 16:02:020117デフォルトの名無しさん
2008/05/26(月) 00:05:41計算機プログラムの構造と解釈
ってどっち買ったらいいの?
なんか最近数学の基礎たりねー
0118デフォルトの名無しさん
2008/05/26(月) 00:17:22つい先日第2版が出たので聞いてみた
私事だけど金がないので優先度が欲しい
0119デフォルトの名無しさん
2008/05/26(月) 07:36:440120デフォルトの名無しさん
2008/05/26(月) 09:26:17しかもHaskellには関係ない
推薦図書スレは別にあるよ
0121デフォルトの名無しさん
2008/05/26(月) 14:08:03http://science6.2ch.net/test/read.cgi/informatics/1160740645/
012236 ◆K0BqlCB3.k
2008/05/26(月) 15:31:05arrow使ってていつも思うんだが、並列処理に向いてなくない?
FPGAとかのHDL記述とかに応用したりしてる人いないの?
0123デフォルトの名無しさん
2008/05/26(月) 22:01:15若いうちに読んどいた方がいいのは計算理論の基礎 の方だろ。
計算機プログラムの構造と解釈は仕事で必要になってからで十分。
0124デフォルトの名無しさん
2008/05/26(月) 22:17:09独学でやってしまった奴は
次何すればいいの?
とりあえず今自習でλの数学側の
側面勉強してみているが
何の役に立つかわからん
0125デフォルトの名無しさん
2008/05/26(月) 22:24:27http://d.hatena.ne.jp/m-hiyama/20070220/1171956186
0126デフォルトの名無しさん
2008/05/26(月) 22:27:23むしろ、次に述べるようなことがより大きな動機となります。
まず、関数を表現する方法としてのラムダ記法(lambda notation)に慣れて、紙と鉛筆によるインフォーマルなラムダ計算が出来ると、
けっこうそれを使える場面が多いのです。例えば、「JavaScriptによるテンプレート・モナド、すっげー簡単!」の最後で、モナド法則を示すために、
インフォーマルなラムダ計算を使っています。
ある種の計算的実体(例:クロージャ)や計算手法(例:継続ベースの計算)の説明にもラムダ式がよく使われます。
式言語(EL; expression language)に対する処理系(パーザーやエバリュエータ)を作る場合なども、ラムダ計算が良いヒントになるでしょう。
もちろんラムダ計算は、既存の関数型言語を理解する基盤となります。あるいは、新しいプログラミング言語を設計する際にもラムダ計算が規範になるかも知れません。
0127デフォルトの名無しさん
2008/05/26(月) 22:45:040128デフォルトの名無しさん
2008/05/26(月) 23:36:500129デフォルトの名無しさん
2008/05/27(火) 00:14:010130デフォルトの名無しさん
2008/05/27(火) 07:23:35という定義で自然数(0以上の整数)が表現できる。(ペアノの公理を満たす)
このとき S のことを後者関数(successor function)と呼ぶ。
0131デフォルトの名無しさん
2008/05/27(火) 11:39:43定義に再帰を使っていいんですか?
とか聞くとYコンビネータとか出てきちゃうんだろうか
0132デフォルトの名無しさん
2008/05/27(火) 16:49:17yampaっていったい何ですか?
ごく簡単に馬鹿でもわかるように概要を説明してください
0133デフォルトの名無しさん
2008/05/27(火) 19:16:35http://d.hatena.ne.jp/propella/20070315/p1
なんかどうよ。
0134デフォルトの名無しさん
2008/05/27(火) 20:06:04http://ll.jus.or.jp/llw2004/program/Reactive.pdf
5ページ目
Haskell による Arrowised Functional Reactive
Programming という実装
0135デフォルトの名無しさん
2008/05/27(火) 22:54:500136デフォルトの名無しさん
2008/05/28(水) 07:20:03その他良本情報はこちら
ttp://www.kurims.kyoto-u.ac.jp/~hassei/reading_list.html
0137デフォルトの名無しさん
2008/05/31(土) 11:55:19ファイルってどこかに落ちてませんかね。
0138デフォルトの名無しさん
2008/05/31(土) 13:59:28ttp://www.haskell.org/soe/software1.htm
0139デフォルトの名無しさん
2008/05/31(土) 14:22:28あ、これってグラフィックライブラリだけじゃなくて、本のコードも
入ってるのか。勘違いしてた。ありがとう。
0140デフォルトの名無しさん
2008/05/31(土) 20:44:19このときの
Maybe a -> (a -> Maybe b) ここまでが入力だよね?
2項目の引数が関数になっているって解釈でいいんだよね?
0141デフォルトの名無しさん
2008/05/31(土) 21:04:280142デフォルトの名無しさん
2008/05/31(土) 21:41:20入力 : Maybe a
出力 : (a -> Maybe b) -> Maybe b
0143デフォルトの名無しさん
2008/05/31(土) 21:51:450144デフォルトの名無しさん
2008/05/31(土) 21:52:57同じことじゃねーか
関数を返す関数と二引数の関数を同一視するのはHaskellでは普通の習慣
0145デフォルトの名無しさん
2008/05/31(土) 22:22:38a -> Maybe b
っていう関数を引数にとるっていうことだよ
0146初心者修業中
2008/05/31(土) 22:30:19Maybe a -> (a -> Maybe b) の2つを入力とする事もできるし、
Maybe a だけを入力とする事もできる。
後者の場合は(a -> Maybe b) -> Maybe bの関数が出力となる。
これを部分適用といい、こういった事ができるのが
Haskellの魅力である。
…と認識しています。
0147デフォルトの名無しさん
2008/05/31(土) 22:31:41えっとねそれじゃあ
Maybe aと関数を引数に取るために
(a -> Maybe b)、この2つを与えてますよね?
関数渡すためにこう記述するしか方法がないから
そのようになっていると理解したてみたのですが
どうやら上の人曰く間違っているようで何が違うのでしょうか
Haskellはグラフ簡約によって1度に1つのTermを解釈していくだけ
なので、最終的な結果は高々1つになるはずだと思っていたのですが
どうやら違うようで混乱してきました。困った、不勉強だ困った
0148デフォルトの名無しさん
2008/05/31(土) 22:38:00右結合の二項演算子?である「->」の結合順序をデフォルトから変更している。
A -> B -> C -> D
は、「->」が右結合の二項演算子?であるがゆえに、
A -> (B -> (C -> D))
と解釈される。
A -> (B -> C) -> D
は、
A -> ((B -> C) -> D)
と解釈される。
0149デフォルトの名無しさん
2008/05/31(土) 22:39:34>どうやら上の人曰く間違っているようで
間違ってないよ
0150デフォルトの名無しさん
2008/05/31(土) 22:55:51> Haskellはグラフ簡約によって1度に1つのTermを解釈していくだけ
> なので、最終的な結果は高々1つになるはずだと思っていたのですが
> どうやら違うようで混乱してきました。困った、不勉強だ困った
型の問題と適用の問題が、頭のなかでうまく区別が付いていないのでは?
適用される関数はA -> (B -> C) -> D型で変化はないけど、
* A型の「値」に適用すると、(B -> C) -> D型の「値」(関数)が帰ってくる。
* A型の「値」と、 (B -> C)型の「値」(関数)の2引数に適用すると、D型の「値」が帰ってくる。
このように考えてはどうか。
これで納得できなければ、やっぱり単純に、
A -> (B -> C) -> D型は、A型の値をとって、(B -> C) -> D型の値を返す関数の「型」
という出発点に戻るべきかな。
0151デフォルトの名無しさん
2008/05/31(土) 22:56:33> Maybe a -> (a -> Maybe b) ここまでが入力だよね?
の部分。
> 2項目の引数が関数になっているって解釈でいいんだよね?
こっちは合ってる。
0152デフォルトの名無しさん
2008/05/31(土) 23:54:09↓ではお願いします。
0153デフォルトの名無しさん
2008/05/31(土) 23:58:340154初心者修業中
2008/06/01(日) 01:08:22複数の引数を持つ関数を
引数一つの関数の組み合せとする事。
…と認識しています。
0155デフォルトの名無しさん
2008/06/01(日) 01:08:36「カリンカカリンカ カリンカマヤ」という歌が繰り返されて止まらなくなる。
0156デフォルトの名無しさん
2008/06/01(日) 01:54:38でも、カリー化ときいてターメリックをぶっかけてるイメージしかないw
0157デフォルトの名無しさん
2008/06/01(日) 09:01:040158デフォルトの名無しさん
2008/06/01(日) 10:27:150159デフォルトの名無しさん
2008/06/01(日) 10:28:140160デフォルトの名無しさん
2008/06/01(日) 10:59:26A -> (B -> C)
というふうに切り出してしまったけど、これは本来の
A → ((B → C) → D)
という結合関係を無視してる(「A -> (B -> C)」という型を扱うみたいに書いている)。
ってのが>>142でしょ。
カリー化の影響として、「複数の引数をとる」
(A × (B → C)) → D
ことと、「関数を返す」ことの、どちらに主眼があるかが不明瞭になるってのがあると思うね。
0161デフォルトの名無しさん
2008/06/01(日) 11:24:29その理屈は分かるんだが、カリー化を理解してるのか怪しい初心者に対して
混乱させるようなことを言うのは不親切だと思う
Maybe aと(a -> Maybe b)の二つが引数になっているという理解で正しい、と教えれば十分じゃないか
0162デフォルトの名無しさん
2008/06/01(日) 11:29:36f : A×B×C→Y
f a b c = ((f a) b) c = y
(((f a) b) c) : Y
((f a) b) : C→Y
(f a) : B→(C→Y)
f : A→(B→(C→Y))
0163デフォルトの名無しさん
2008/06/01(日) 11:48:09「ここまでが引数リストに対応する部分だよね?」と読むと○
「ここまでが引数の型だよね?」と読むと× ← ちょっと窮屈な解釈かも、みたいな空気
0164デフォルトの名無しさん
2008/06/01(日) 15:19:49と書けばおk
0165デフォルトの名無しさん
2008/06/01(日) 17:10:160166デフォルトの名無しさん
2008/06/01(日) 23:06:52■ このスレッドは過去ログ倉庫に格納されています