08/05/17 16:41:29
haskell.org
URLリンク(www.haskell.org)
日本語サイト
URLリンク(www.sampou.org)
URLリンク(www.shido.info)
過去ログ
関数型プログラミング言語Haskell
Part1 URLリンク(pc.2ch.net)
Part2 スレリンク(tech板)
Part3 スレリンク(tech板)
Part4 スレリンク(tech板)
Part5 スレリンク(tech板)
Part6 スレリンク(tech板)
Part7 スレリンク(tech板)
Part8 スレリンク(tech板)
・2chの仕様により、行頭の半角スペースは表示されません。
コードをインデントしたいときは、代わりに または全角スペースを使うことができます。
2:デフォルトの名無しさん
08/05/17 16:42:18
関連書籍
・Introduction to Functional Programming Using Haskell
URLリンク(www.amazon.co.jp)
・Haskell: The Craft of Functional Programming
URLリンク(www.amazon.co.jp)
・The Fun of Programming
URLリンク(www.amazon.co.jp)
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
URLリンク(www.amazon.co.jp)
・入門Haskell
URLリンク(item.rakuten.co.jp)
・ふつうのHaskellプログラミング
URLリンク(item.rakuten.co.jp)
3:デフォルトの名無しさん
08/05/17 16:42:39
関連スレ
・関数型言語Part IV
スレリンク(tech板)
・【数学者】Haskellはクソ言語【オナニー】
スレリンク(tech板)
・純粋関数型言語Concurent Clean
スレリンク(tech板)
・関数型言語ML(SML, OCaml, etc.), Part 5
スレリンク(tech板)
・Lisp Scheme Part21
スレリンク(tech板)
・【入門】CommonLispその4【質問よろず】
スレリンク(tech板)
・Emacs Lisp 3
スレリンク(tech板)
4:デフォルトの名無しさん
08/05/17 16:43:00
・日本語の扱いについて
Haskell98によると、Charは一つのUnicode文字を表す(6.1.2)。
これに従って、比較的新しいHugsやGHC(6.4系を含む)ではCharは32ビット整数になっている。
ただし、どちらも入出力に際しての変換が完全でない。具体的には、
・ソースコード中の文字列リテラル
・System.IOライブラリでの入出力
が問題になる。
1. GHC6.4.2以前
ソースコード・入出力ともLatin-1を仮定する。Latin-1ではバイト値と
コードポイントが一致するので、入力時には外部エンコードの各バイトがそのままCharに
入り、出力時にはCharの下位8ビットのみが出力されるような実装になっている。
このため、あるエンコーディング(Latin-1とは限らない)の入力をgetLineで受け取り、
それをそのままputStrで表示すれば、入力時とおなじエンコードにおいて正しく表示される。
これを利用して、[Char]を、本来のコードポイントの列としてではなく、特定のエンコードの下での
バイト列として使うことができる。ただし文字列リテラルについては、GHCはLatin-1として
不正な文字を受け付けないので、EUC-JPのような例外を除くと、単純にリテラルを使うことはできない。
2. GHC6.6
ソースコードにはUTF-8、入出力にはLatin-1を仮定する。このため、EUC-JPでリテラルを直に
書くことはできない。
(続く)
5:デフォルトの名無しさん
08/05/17 16:43:20
(続き)
3.最近のHugs(非WindowsかつCのwchar_tがUnicodeの環境、というかLinux)
ソースコード・入出力ともロケールのエンコードを利用する。
4.最近のHugs(Windows)
ソースコード・入出力ともLatin-1を仮定する。ただし文字列リテラルにShift-JISを使ってもエラーにならない。
5.最近のHugs(それ以外)
未調査。
・結局どうするか。
規格どおりにCharにUnicodeを入れるか、Charを単なるバイトとして扱うかの二択。
i. CharをUnicodeとして扱う
(3)以外の場合入出力で変換が必要。(2)または(3)以外の場合文字列リテラルでは
明示的なエスケープ(たとえば"\22234")が必要。
ii. Charをバイトとして扱う
(3)ではファイルをバイナリモードで開くなどの対策が必要。(1)でEUC-JPを使う場合と(4)
を除き文字列リテラルでは明示的なエスケープ(たとえば"\143\153")が必要。
lengthやisAlphaのような関数、およびwin32パッケージの関数(win32API)が正しく動作しない。
6:デフォルトの名無しさん
08/05/17 16:43:41
テンプレはここまで。
前スレが終わってからしばらく建ってなかったので建てました。
行き届かないところがあったらごめんなさい。
7:デフォルトの名無しさん
08/05/17 17:05:58
_
, '´ λ ヽ
!,.イリノ)))〉
リ)^ヮ^ノ| このスレのマスコットキャラ
ノ⊂)水!つ
((( く/_l〉 リ はすけるたん
`` し'ノ
8:デフォルトの名無しさん
08/05/17 18:53:58
質問です
Word8からWord32に変換する方法についてなのですが、
Word8からtoInteger・fromInteger関数を経てWord32に変換する以外に、
クレバーな方法はありませんか?
9:デフォルトの名無しさん
08/05/17 18:54:51
リアルhaskellたん
URLリンク(www.haskell.org)
10:デフォルトの名無しさん
08/05/17 19:44:18
>>8
n(n-1)個のcastを用意するのが
2n個のcastを用意するよりクレバーだと思いますか?
11:デフォルトの名無しさん
08/05/17 20:00:31
そろそろ、テンプレの GHC 6.6 の日本語の取り扱いについて書き改めて欲しい。
1. ソース中の文字列 hello = "こんにちは" :: String は UTF-8
2. これを ghci で表示することは可能:(ただし、環境変数 LANG を UTF-8 にしておくこと、また、ターミナルも UTF-8 で入出力できるようにしておくこと)
Main> print hello
こんにちは
Main>
3. 入出力 IO は Latin-1 だが、package utf8-string (URLリンク(code.haskell.org)) を導入することにより、入出力を UTF-8 にすることができる
4. その他の文字列エンコード(ShiftJIS, JIS, EUC-JP など) は、package iconv (URLリンク(hackage.haskell.org)) で UTF-8 な文字列にする
とまあ、こういうことで、日本語表示できるわけだ。iconv package は MacOSX と *BSD では cabal を少しいじらなければいけないことに注意しろよ(iconv.cabal のコメントに書いてある)
よろしくたのむ、な。
12:sage
08/05/17 20:05:38
>>8
toEnum . fromEnum でよくね
13:デフォルトの名無しさん
08/05/17 21:23:49
>>11
>1. ソース中の文字列 hello = "こんにちは" :: String は UTF-8
これどういう意味?Stringになってしまえば文字コード関係なくね?
>2. これを ghci で表示することは可能
*Main> print hello
"\12371\12435\12395\12385\12399"
こうなった
14:デフォルトの名無しさん
08/05/17 21:25:11
>>8
fromIntegral :: (Integral a, Num b) => a -> b
fromIntegral = fromInteger . toInteger
という関数がある
15:デフォルトの名無しさん
08/05/17 21:41:45
fromIntegralはGHCだといろいろ特殊化されてて効率もいいしな
16:デフォルトの名無しさん
08/05/18 08:26:56
新スレ乙です。
上げていただいている関連書籍で、
・Introduction to Functional Programming Using Haskell
・Haskell: The Craft of Functional Programming
は読み終えて、
・The Haskell School of Expression: Learning Functional Programming Through Multimedia
を問題解きつつ進めているところですけど、
・The Fun of Programming
次はこちらがいいんでしょうか。それともネット上の新しい記事とかを
見ていくほうがいいですか?
17:デフォルトの名無しさん
08/05/18 09:26:23
>>16
The Haskell Programmer's Guide to the IO Monad ― Don't Panic
URLリンク(stefan-klinger.de)
は、Haskellのモナドを理解するのにおすすめ。
18:デフォルトの名無しさん
08/05/18 12:25:58
質問です。
100MB程度の音楽データを編集するツールを作ろうと思っているのですが、
音楽データを格納するための型のお勧めは何ですか?
19:デフォルトの名無しさん
08/05/18 12:39:36
音楽データって波形データ?
音楽ツールのことは良く知らないから一般的なことだけ言うと、
Haskellで配列っぽいデータを扱うときに一番空間効率がいいのは非ボックス化配列
(具体的にはUArrayかIOUArrayかSTUArray)で、Cの配列と同じくらいコンパクト
ただし、これは生の配列だから切ったり貼ったりするのには向かない
切り貼りしたいなら、「非ボックス化配列を葉とする木」みたいな構造が必要かも
ところで音楽編集ソフトって全部メモリ上で作業するんだろうか
20:デフォルトの名無しさん
08/05/18 22:20:25
>>17
ありがとうございます。文系なので理解できるか不安ですがw。
一通りの基本構文については馴染んできたと思うので、もう少し
アプリ全体の構成などについての解説文書みたいなものって
ありますでしょうか。
或いは、モナドもその一つだと思うのですが、関数型によるプログラミング
テクニックというんでしょうか、そういったものがもう少しまとまっている
本があると嬉しいんですが。
21:デフォルトの名無しさん
08/05/18 23:25:58
文系出身のやつって知ったかぶり多いよな。
細かいこと考えないのが吉なのか凶なのか。
22:デフォルトの名無しさん
08/05/18 23:34:12
絶対的な真理は無いという事を知ってるからじゃないかな。
23:デフォルトの名無しさん
08/05/18 23:37:22
理系は論理を重視するんだよ。
真理?なにそれ食えるの?
24:デフォルトの名無しさん
08/05/18 23:40:59
例えば
4 :: Int
は絶対的な真理じゃね?
25:デフォルトの名無しさん
08/05/18 23:50:33
論理は文系だろ
26:デフォルトの名無しさん
08/05/19 00:15:42
はい?俺理系なんで良く分かりません。
ささ、次行きましょう
27:デフォルトの名無しさん
08/05/19 00:16:50
>>24
その例のようなことが成り立つ数体系が便利だから、
たまたま人間が採用して「正しい」として使ってるだけとも言える
とはいえ、「数学は人間の存在にかかわらず成立するから
数学はこの世の真理の一つだ」と主張する哲学者もいたような
28:デフォルトの名無しさん
08/05/19 00:19:33
哲学者なんてはったり言うだけのでくの坊だろ 次行くぞ次
29:デフォルトの名無しさん
08/05/19 00:22:38
理系のやつって細かい事考えないんだな。
30:デフォルトの名無しさん
08/05/19 00:27:10
>>27
言葉が足りなかったな
Haskell98における式「4」は、Haskell98における型式「Int」で表される型を持つ
と言えばよかったか
もちろんHaskell98ってのは地球でBC1998年に定義された「あの」Haskell98のことで、
「型」とか「式」とかの術語はHaskell98の仕様に従って解釈するものとしてね
31:デフォルトの名無しさん
08/05/19 00:49:11
真理に「絶対的」なんて付けてるところを見ると
真理の意味が分かってないんだろ
32:デフォルトの名無しさん
08/05/19 00:52:18
真理の意味をお願いします
33:デフォルトの名無しさん
08/05/19 00:53:52
>>32
まことのことわり。
コレは絶対の真理。
34:デフォルトの名無しさん
08/05/19 00:55:36
真理・・・いつもどんな時も変わることのない、正しい物事の筋道。真実の道理。
例:HaskellスレはHaskellを論ずる為に存在している
これでおk?
35:デフォルトの名無しさん
08/05/19 00:55:40
理系の雑談っていつもこんななの?
36:デフォルトの名無しさん
08/05/19 00:59:02
>>33-34
そこから >>31 を導出するのは至難だなw
37:デフォルトの名無しさん
08/05/19 01:04:01
「真理」は既に絶対的なものだから「絶対的な真理」という表現は「絶対的」が重複しているってことだろ
38:デフォルトの名無しさん
08/05/19 01:06:01
>>35
理系に限らず2chの雑談はどこもこんな感じです。
39:デフォルトの名無しさん
08/05/19 01:07:30
今日はいつにもましてバカが多いな
春か?春だからなのか?
40:デフォルトの名無しさん
08/05/19 01:19:01
>>37
修飾語は強調する為にも使うけど、意味内容の重複は許されないという主張?
41:デフォルトの名無しさん
08/05/19 01:25:54
程度の存在しない物に強調もクソもないだろ
42:デフォルトの名無しさん
08/05/19 01:31:46
あ、強調って分かり辛かったか。念押しだと考えてみな。
43:デフォルトの名無しさん
08/05/19 13:06:15
程度の存在しない物に念押しもクソもないだろ
44:デフォルトの名無しさん
08/05/19 13:50:33
まさに自転車置場の議論
45:デフォルトの名無しさん
08/05/19 18:57:28
+++ってどういう意味なんですか?
+とか++とかもあってよくわからないのですが
46:デフォルトの名無しさん
08/05/19 19:25:42
>>30
× haskell4000年の歴史
○ AD
47:デフォルトの名無しさん
08/05/19 19:41:15
>>45
解らないなら使うな以上
48:デフォルトの名無しさん
08/05/19 19:46:25
>>45
(+) は Integralクラスのインスタンス、つまり数の加法。
(++) は リストの結合。[1, 2, 3] ++ [4, 5, 6] は [1,2,3,4,5,6]。
(+++) は Arrowの合成かなにかに使う。Arrowは俺も良くわかんないし、まあ知らんでもプログラムは書けるから気にするな。
49:デフォルトの名無しさん
08/05/19 19:46:29
>>45 型を見てみろ
50:デフォルトの名無しさん
08/05/19 19:49:24
>>48
失敬!(+)はIntegralじゃなくてNumクラスのインスタンスの加法だな。
51:デフォルトの名無しさん
08/05/19 20:03:27
質問です。
「16文字のString型」という定義は型定義の段階でできるのでしょうか?
52:デフォルトの名無しさん
08/05/19 20:11:35
>>48
ありがとうございます
53:デフォルトの名無しさん
08/05/19 20:14:01
>>51
絶対の真理
54:20
08/05/19 22:42:22
「文系」という一言でスレがこんなに伸びるとは思いませんでしたw。
ちなみに自分は理系人間に対しては羨望の眼差しで見ています。
The Fun of Programming って読んだ方いらっしゃいますでしょうか。
55:デフォルトの名無しさん
08/05/19 23:25:55
今日先輩にHaskellできると
彼女ができると聞いたのですが
みなさんは彼女いてますか?
56:デフォルトの名無しさん
08/05/19 23:39:55
>>55
55人ぐらいいるよ。
57:デフォルトの名無しさん
08/05/20 03:13:47
>>16
そんな教科書ばっか読んでなにがしたいの?
>>20
Haskellで書かれたアプリのコード読め。
58:デフォルトの名無しさん
08/05/20 22:55:17
Monagiusは勉強になる。
59:デフォルトの名無しさん
08/05/20 23:03:23
monadiusはもはや古いぞ。
今はもっと洗練されてる。
60:デフォルトの名無しさん
08/05/21 00:08:32
Little Haskeller読んで学習中。日本語版もホスイ
61:デフォルトの名無しさん
08/05/21 01:40:02
>>60
それってリトル隙間の姉妹本?
62:デフォルトの名無しさん
08/05/21 02:51:30
mod_haskell.soまだー?
63:デフォルトの名無しさん
08/05/21 03:51:48
>>62
まってないで作って公開しろ
64:デフォルトの名無しさん
08/05/21 23:00:47
>>59
今って例えばどれ?
65:デフォルトの名無しさん
08/05/22 03:04:27
URLリンク(www.geocities.jp)
古いというか、力技で作ったって感じ。
>>59はFRPを念頭においてるんだろうけど、
FragのObjectBehaviorなんかが洗練されてるのかは微妙。
66:デフォルトの名無しさん
08/05/22 19:37:06
質問です。
0~10までの整数を定義した型というのは宣言できますか?
67:デフォルトの名無しさん
08/05/23 01:04:34
>>27
数学基礎論がまるで分からないんだね。
68:初心者修業中
08/05/23 02:23:32
>>66
data Hoge = Hoge0|Hoge1|Hoge2|Hoge3|…|Hoge10
これじゃ駄目?
69:デフォルトの名無しさん
08/05/23 07:10:08
数学できない奴くるな
70:デフォルトの名無しさん
08/05/23 13:34:41
haskell関係の文書(特に論文)を読みたくてhaskell.orgをあさってるんだけど
沢山あるからどれを読もうか迷ってしまう
このスレ的に、コレは読んでおいて損は無い!って奴あったら教えてくらはい
今のとこ読んだのはImperative functional programmingとLazy vs Strictと
Haskell vs. Ada vs. C++ vs. Awk vs. ...
71:デフォルトの名無しさん
08/05/23 13:47:07
Tackling the awkward squad
72:デフォルトの名無しさん
08/05/23 13:49:13
もうここで紹介される論文はすべて読んだんだよなぁ。
2chは時代遅れ情報しか出てこねーな。noobどもしかいねぇ。
73:デフォルトの名無しさん
08/05/23 13:53:08
2chの情報に価値がないと思うなら立ち去ればいいじゃないか!
74:デフォルトの名無しさん
08/05/23 14:18:52
>>71
落として読んでみるよー
他にもあったら是非教えてクレクレ
>>72
玄人さん面白かった論文教えて
75:デフォルトの名無しさん
08/05/23 14:36:10
>>69
そんな事を言う奴が来るな!
数学なんぞできんでもプログラムはできる!!
76:デフォルトの名無しさん
08/05/23 14:49:15
最初のうちはな
手続き型にどっぷり浸かった後で関数型言語を触って嵌ってしまったやつは
やつは皆計算機科学の世界に飛び込み二度と帰ってこなくなっちまうものなのさ
「コード書いてるより数式弄くってるほうが楽しいおwwww」
俺の同僚の最後の言葉さ・・・
77:デフォルトの名無しさん
08/05/23 16:03:56
だからオブジェクト指向が生き残るのですね
78:デフォルトの名無しさん
08/05/23 18:02:35
最近、自作のソースをarrowで設計段階からやり直そうとしているんだけど、
いまいちメリットが無いんだよなぁ。
前のコードの方が短かったし、arrowにしたせいで複雑になってしまうことも多々ある。
arrowのメリットを具体的に教えてくださいよ。
論文読んでみてもarrowのうまみが伝わってこないんだよね。
79:デフォルトの名無しさん
08/05/23 18:31:30
難読化
80:デフォルトの名無しさん
08/05/23 19:12:20
どんなものが分かりやすいかなんて人それぞれだし
arrowを使ったほうが分かりやすいって感じる人も少しはいるでしょうから
そういう人が勝手に使ってればそれでいいんでしょう
81:36 ◆K0BqlCB3.k
08/05/23 19:20:21
arrowを使ったプログラミングでは設計段階で図式化しやすいところにうまみがあるのかな?
82:36 ◆K0BqlCB3.k
08/05/23 19:21:01
ミスってコテハンつけちゃったぜ
83:デフォルトの名無しさん
08/05/23 19:39:51
>>82
warrockに帰れwww
84:デフォルトの名無しさん
08/05/23 19:58:07
>>78
(モナドと比較した場合)arrowの旨みって、モナドではないがarrowである型があるっていう一点じゃないの?
そういう型を扱うときはarrowの枠組みが便利というだけ
85:36 ◆K0BqlCB3.k
08/05/23 20:07:01
っていうかさ、俺は(\x -> (x, x))とかして処理を分けるのをいちいち書くのがめんどくさいときにarrow使うぜ
86:デフォルトの名無しさん
08/05/23 20:12:53
>>85
確かにそれは慣れれば便利かもな
でも、Arrow (->)という特定のインスタンスを使ってるだけなら、
>>78が言ってるようなArrowの旨味とは別の話な気がする
87:デフォルトの名無しさん
08/05/23 23:35:21
>>71
ちょwwBeautiful Codeって本みながら、たまたまスレ覗いたら、
本の中でソレ紹介されてたぞww
88:デフォルトの名無しさん
08/05/24 00:10:42
arrowって今のところ
解析関係かデバッグ関係
形式証明以外使えそうな分野
無い
89:デフォルトの名無しさん
08/05/24 04:49:01
分かってねーな
90:デフォルトの名無しさん
08/05/24 04:59:31
分かってねーなじゃわからないっす。
91:デフォルトの名無しさん
08/05/24 22:25:11
>>76
関数型が好きな理由は、所謂プログラミングの面白さがあるからではないな。
92:デフォルトの名無しさん
08/05/25 00:01:55
do { ... } は「アクションっていう値」という認識でいいの?
93:初心者修業中
08/05/25 00:18:03
>>92
do構文はbind演算子で結合された式を
手続型言語っぽく見せる糖衣構文と認識してますが。
94:デフォルトの名無しさん
08/05/25 01:33:41
>>92
do{...}が値を持つ単なる式であるか、という質問ならそのとおり
>>93が言うようにdo式は構文糖で、bind演算子(>>=)の略記
do式の値が(広い意味で)アクションか、という質問ならそのとおり
具体的には、IOモナドに関するdo式なら値はIOアクション、リストモナドならリスト、という具合
95:92
08/05/25 01:35:15
>>94
そういう意図の質問でした。ありがとう。
96:初心者修業中
08/05/25 02:31:03
>>94
>(広い意味で)アクション
の意味がわかりません。
Maybeも(広い意味で)アクションなのでしょうか?
97:デフォルトの名無しさん
08/05/25 03:08:50
>>96
そういうつもりで書いた
一般的でない用語法だったらすまん
98:デフォルトの名無しさん
08/05/25 03:28:30
Just x : なにもしないでxを返すアクション
Nothing : 計算を即座に終了させるアクション
99:デフォルトの名無しさん
08/05/25 07:33:24
f x: xにfを適用するアクション
1 + 2: 1と2を加えるアクション
100:デフォルトの名無しさん
08/05/25 09:42:48
理系の方々に伺いたいんですけど、Haskellは数学で蓄積された
知識をダイレクトにコード化が可能だと感じますか?
Cなんかだと似ても似つかないものにしないといけませんよね。
数学的なモデルのシュミレーションなんかを記述する際に、
正しく書くのは結構大変じゃないかと思ってしまいます。
そういう点で、Haskellはそのままとは言いませんが書きやすいの
かなぁと。だけど、僕の知人で理系の人たちはC言語使う場合が
多いようです。最大の理由はスピードだそうですが、手間を考えると
早い計算機使ってHaskellで書いた方がいい、という考えの人も
いるんでしょうか。
101:デフォルトの名無しさん
08/05/25 10:41:40
ダイレクト云々よりも
LINPACKが使えるかどうか
それが問題だ
102:デフォルトの名無しさん
08/05/25 10:49:58
>>99
関数とアクションは同じものなの?
103:デフォルトの名無しさん
08/05/25 10:55:25
>>102
別のものだよ
>>99はネタ(か、たちの悪い誤解)だから真に受けんな
104:デフォルトの名無しさん
08/05/25 11:19:31
LINPACKとか言ってるおっさん
氏ねよw
105:デフォルトの名無しさん
08/05/25 11:24:30
>>100
0か1かみたいな考え方は辞めた方がいいかと。
工学の人は合理的、合目的的に考えるから、適材適所でやります。
速い計算機に、さらに速いソフトウェアがあれば、より計算を回せます。
計算機が速いから、ソフトウェアは遅くていいなんてやり方じゃ、
ライバルに負けてしまいます。遊びならそれでもいいけど。
106:デフォルトの名無しさん
08/05/25 11:39:54
>>100
107:デフォルトの名無しさん
08/05/25 12:36:24
「アクション」ていうのはIOモナドだけじゃねえの?
Maybeとかでも「アクション」ていうの?
108:デフォルトの名無しさん
08/05/25 12:43:09
少なくともStateとかSTMモナドではアクションって言うよ
109:デフォルトの名無しさん
08/05/25 12:43:17
自分もActionというのはIOだけを指しているのだと思ってました。要するに
関数の外の世界に対して、関数の動きが影響を与えたり、逆の現象が発生
するのがActionであり、IO型であると。
IOがモナドなのは、モナド則に当てはまるから、ってだけではないでしょうか?
110:デフォルトの名無しさん
08/05/25 13:21:38
モナド則に当てはまらないものをモナドと言うわけないでしょ。
111:デフォルトの名無しさん
08/05/25 13:24:07
>>105
そうそう、その時点その時点でのベストを尽くします。そして、過去の仕事に対するリスペクトも忘れません。
112:デフォルトの名無しさん
08/05/25 15:24:57
質問です
たとえば
data Hoge = Hoge { x1 :: Word32, x2 :: Word32, x3 :: Word16, x4 :: Word16}
のようなHogeを[Word8]と相互変換する便利な方法ってないでしょうか?
113:デフォルトの名無しさん
08/05/25 15:29:12
使ったことないけどSerTHとか?
114:デフォルトの名無しさん
08/05/25 15:33:25
>>113
へえ・・・ 何となくおもしろそう
ドキュメントとか読んでみます
115:デフォルトの名無しさん
08/05/25 15:58:20
SerTH見てみましたけれど、どうやら私の用向きとは違うようですね。
116:デフォルトの名無しさん
08/05/25 16:02:02
Template Haskellの方もちょっと見てみます
117:デフォルトの名無しさん
08/05/26 00:05:41
計算理論の基礎
計算機プログラムの構造と解釈
ってどっち買ったらいいの?
なんか最近数学の基礎たりねー
118:デフォルトの名無しさん
08/05/26 00:17:22
ちなみに計算理論の基礎が
つい先日第2版が出たので聞いてみた
私事だけど金がないので優先度が欲しい
119:デフォルトの名無しさん
08/05/26 07:36:44
後者は原著がネット上で無料で読めるから前者
120:デフォルトの名無しさん
08/05/26 09:26:17
というか全然違う傾向のほんのどっちがいいか聞かれても…
しかもHaskellには関係ない
推薦図書スレは別にあるよ
121:デフォルトの名無しさん
08/05/26 14:08:03
こっちでいいかと
スレリンク(informatics板)
122:36 ◆K0BqlCB3.k
08/05/26 15:31:05
全く調べずに聞くが、concurrent arrowなんてのは無いの?
arrow使ってていつも思うんだが、並列処理に向いてなくない?
FPGAとかのHDL記述とかに応用したりしてる人いないの?
123:デフォルトの名無しさん
08/05/26 22:01:15
>>117
若いうちに読んどいた方がいいのは計算理論の基礎 の方だろ。
計算機プログラムの構造と解釈は仕事で必要になってからで十分。
124:デフォルトの名無しさん
08/05/26 22:17:09
>>123
独学でやってしまった奴は
次何すればいいの?
とりあえず今自習でλの数学側の
側面勉強してみているが
何の役に立つかわからん
125:デフォルトの名無しさん
08/05/26 22:24:27
絵を描いて学ぶ・プログラマのためのラムダ計算
URLリンク(d.hatena.ne.jp)
126:デフォルトの名無しさん
08/05/26 22:27:23
僕が「ラムダ計算は知っておいたほうがいい」と思う理由は、形式的計算体系としての“純粋ラムダ計算”が理論的に重要だから、というだけではありません。
むしろ、次に述べるようなことがより大きな動機となります。
まず、関数を表現する方法としてのラムダ記法(lambda notation)に慣れて、紙と鉛筆によるインフォーマルなラムダ計算が出来ると、
けっこうそれを使える場面が多いのです。例えば、「JavaScriptによるテンプレート・モナド、すっげー簡単!」の最後で、モナド法則を示すために、
インフォーマルなラムダ計算を使っています。
ある種の計算的実体(例:クロージャ)や計算手法(例:継続ベースの計算)の説明にもラムダ式がよく使われます。
式言語(EL; expression language)に対する処理系(パーザーやエバリュエータ)を作る場合なども、ラムダ計算が良いヒントになるでしょう。
もちろんラムダ計算は、既存の関数型言語を理解する基盤となります。あるいは、新しいプログラミング言語を設計する際にもラムダ計算が規範になるかも知れません。
127:デフォルトの名無しさん
08/05/26 22:45:04
そもそも計算とはいったいなんなんだ?
128:デフォルトの名無しさん
08/05/26 23:36:50
後者関数ってなんだぉ?
129:デフォルトの名無しさん
08/05/27 00:14:01
やっぱ手書きしねーと理解できねーよw
130:デフォルトの名無しさん
08/05/27 07:23:35
data type Nat = O | S Nat
という定義で自然数(0以上の整数)が表現できる。(ペアノの公理を満たす)
このとき S のことを後者関数(successor function)と呼ぶ。
131:デフォルトの名無しさん
08/05/27 11:39:43
ここで
定義に再帰を使っていいんですか?
とか聞くとYコンビネータとか出てきちゃうんだろうか
132:デフォルトの名無しさん
08/05/27 16:49:17
質問です
yampaっていったい何ですか?
ごく簡単に馬鹿でもわかるように概要を説明してください
133:デフォルトの名無しさん
08/05/27 19:16:35
>>132
URLリンク(d.hatena.ne.jp)
なんかどうよ。
134:デフォルトの名無しさん
08/05/27 20:06:04
>>132
URLリンク(ll.jus.or.jp)
5ページ目
Haskell による Arrowised Functional Reactive
Programming という実装
135:デフォルトの名無しさん
08/05/27 22:54:50
Yampaってコンパみたいなもん?
136:デフォルトの名無しさん
08/05/28 07:20:03
>>127N.D.Jones, Computability and Complexity
その他良本情報はこちら
URLリンク(www.kurims.kyoto-u.ac.jp)
137:デフォルトの名無しさん
08/05/31 11:55:19
「The Haskell School of Expression」で使われているコードの
ファイルってどこかに落ちてませんかね。
138:デフォルトの名無しさん
08/05/31 13:59:28
>>137
URLリンク(www.haskell.org)
139:デフォルトの名無しさん
08/05/31 14:22:28
>>138
あ、これってグラフィックライブラリだけじゃなくて、本のコードも
入ってるのか。勘違いしてた。ありがとう。
140:デフォルトの名無しさん
08/05/31 20:44:19
comb :: Maybe a -> (a -> Maybe b) -> Maybe b
このときの
Maybe a -> (a -> Maybe b) ここまでが入力だよね?
2項目の引数が関数になっているって解釈でいいんだよね?
141:デフォルトの名無しさん
08/05/31 21:04:28
うん
142:デフォルトの名無しさん
08/05/31 21:41:20
違うだろw
入力 : Maybe a
出力 : (a -> Maybe b) -> Maybe b
143:デフォルトの名無しさん
08/05/31 21:51:45
()でくくるとどうなるのw?
144:デフォルトの名無しさん
08/05/31 21:52:57
>>142
同じことじゃねーか
関数を返す関数と二引数の関数を同一視するのはHaskellでは普通の習慣
145:デフォルトの名無しさん
08/05/31 22:22:38
>>143
a -> Maybe b
っていう関数を引数にとるっていうことだよ
146:初心者修業中
08/05/31 22:30:19
>>140
Maybe a -> (a -> Maybe b) の2つを入力とする事もできるし、
Maybe a だけを入力とする事もできる。
後者の場合は(a -> Maybe b) -> Maybe bの関数が出力となる。
これを部分適用といい、こういった事ができるのが
Haskellの魅力である。
…と認識しています。
147:デフォルトの名無しさん
08/05/31 22:31:41
>>145
えっとねそれじゃあ
Maybe aと関数を引数に取るために
(a -> Maybe b)、この2つを与えてますよね?
関数渡すためにこう記述するしか方法がないから
そのようになっていると理解したてみたのですが
どうやら上の人曰く間違っているようで何が違うのでしょうか
Haskellはグラフ簡約によって1度に1つのTermを解釈していくだけ
なので、最終的な結果は高々1つになるはずだと思っていたのですが
どうやら違うようで混乱してきました。困った、不勉強だ困った
148:デフォルトの名無しさん
08/05/31 22:38:00
>>143
右結合の二項演算子?である「->」の結合順序をデフォルトから変更している。
A -> B -> C -> D
は、「->」が右結合の二項演算子?であるがゆえに、
A -> (B -> (C -> D))
と解釈される。
A -> (B -> C) -> D
は、
A -> ((B -> C) -> D)
と解釈される。
149:デフォルトの名無しさん
08/05/31 22:39:34
>>147
>どうやら上の人曰く間違っているようで
間違ってないよ
150:デフォルトの名無しさん
08/05/31 22:55:51
>>147
> 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型の値を返す関数の「型」
という出発点に戻るべきかな。
151:デフォルトの名無しさん
08/05/31 22:56:33
>>142が突っ込んでるのは
> Maybe a -> (a -> Maybe b) ここまでが入力だよね?
の部分。
> 2項目の引数が関数になっているって解釈でいいんだよね?
こっちは合ってる。
152:デフォルトの名無しさん
08/05/31 23:54:09
カリー化とは何か?を書いた方がいいんではないでしょうか。
↓ではお願いします。
153:デフォルトの名無しさん
08/05/31 23:58:34
この関数適用は出来損ないだ。食べられないよ。
154:初心者修業中
08/06/01 01:08:22
カリー化とは、
複数の引数を持つ関数を
引数一つの関数の組み合せとする事。
…と認識しています。
155:デフォルトの名無しさん
08/06/01 01:08:36
カリー化という言葉を見ると頭の中で
「カリンカカリンカ カリンカマヤ」という歌が繰り返されて止まらなくなる。
156:デフォルトの名無しさん
08/06/01 01:54:38
おれもそうりかいしてる。<154
でも、カリー化ときいてターメリックをぶっかけてるイメージしかないw
157:デフォルトの名無しさん
08/06/01 09:01:04
ガラムマサラとかも入れた方がいいのでは?
158:デフォルトの名無しさん
08/06/01 10:27:15
エバラ化、桃屋化
159:デフォルトの名無しさん
08/06/01 10:28:14
味の素化
160:デフォルトの名無しさん
08/06/01 10:59:26
>>140は
A -> (B -> C)
というふうに切り出してしまったけど、これは本来の
A → ((B → C) → D)
という結合関係を無視してる(「A -> (B -> C)」という型を扱うみたいに書いている)。
ってのが>>142でしょ。
カリー化の影響として、「複数の引数をとる」
(A × (B → C)) → D
ことと、「関数を返す」ことの、どちらに主眼があるかが不明瞭になるってのがあると思うね。
161:デフォルトの名無しさん
08/06/01 11:24:29
>>151>>160
その理屈は分かるんだが、カリー化を理解してるのか怪しい初心者に対して
混乱させるようなことを言うのは不親切だと思う
Maybe aと(a -> Maybe b)の二つが引数になっているという理解で正しい、と教えれば十分じゃないか
162:デフォルトの名無しさん
08/06/01 11:29:36
f(a,b,c) = y
f : 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))
163:デフォルトの名無しさん
08/06/01 11:48:09
> Maybe a -> (a -> Maybe b) ここまでが入力だよね?
「ここまでが引数リストに対応する部分だよね?」と読むと○
「ここまでが引数の型だよね?」と読むと× ← ちょっと窮屈な解釈かも、みたいな空気
164:デフォルトの名無しさん
08/06/01 15:19:49
> Maybe a -> (a -> Maybe b) -> ここまでが入力だよね?
と書けばおk
165:デフォルトの名無しさん
08/06/01 17:10:16
なるほどw
166:デフォルトの名無しさん
08/06/01 23:06:52
複数引数の邪悪な関数をこらしめるのがカリー化です。
167:デフォルトの名無しさん
08/06/01 23:33:45
それだけならタプルで渡せばいいだけじゃそ
168:デフォルトの名無しさん
08/06/01 23:44:14
:
=>
これがよくわからん
169:デフォルトの名無しさん
08/06/01 23:47:32
<コ:彡
170:デフォルトの名無しさん
08/06/02 00:31:27
兄者…
171:初心者修業中
08/06/02 01:36:10
>>168
:は、リストの先頭に要素を結合する演算子
=>の左辺(文脈)は、
多相的なデータを静的型チェックするために
コンパイラに与える条件
…と認識しています。
172:OCamler
08/06/03 22:55:07
だれかもうちょっと正しいコメントを付けてやってください。お願いします。
173:デフォルトの名無しさん
08/06/04 01:51:13
[1, 2, 3] ← ふつうの見やすい表記(ただし、本来のデータ構造が見えない)
1 : [2, 3]
1 : 2 : [3]
1 : 2 : 3 : [] ← 本来のデータ構築子 (:)(cons)、[](nil)で書く(ただし、いまいちリストに見えない)
1 : (2 : (3 : [])) ← 右結合性にたよらないで書く
(:) 1 ((:) 2 ((:) 3 [])) ← 演算子としての表記法をやめる(S式マゾ以外には読みにくい)
174:初心者修業中
08/06/04 01:51:20
お願いします m(_ _)m
175:デフォルトの名無しさん
08/06/04 03:18:52
Haskell実用経験皆無の俺が来ましたよ
>>168
4.1 Overview of Types and Classes
> but the type system has been extended with type classes (or just classes)
> that provide a structured way to introduce overloaded functions.
型クラスの存在意義がわかるかどうかだと思う。
整数の足し算と有理数の足し算って、ふつう同じ記号を使うけど、
計算の内容は違う(多重定義、オーバーロードされている)でしょ。
でも、共通の性質を考えたいときもある。
そのとき、ただ「共通の演算記号+を使っているから同類とみなす」では話にならないから、
twice :: a -> a
twice x = x + x -- 2倍したいけど、+の型などがコンパイル時に不明
+を「Numという型クラスの特徴」として整理して、整数や有理数はその特徴を共有している、とみなすと。
twice :: Num a => a -> a -- 「型aはクラスNumに属する(Numのインスタンスである)」という前提をする
twice x = x + x -- と、演算子+の存在と型が保証される
そんな感じ?(ごめん、確認してない)
176:デフォルトの名無しさん
08/06/04 07:01:52
改めて見るとオーバーロードの解釈が破綻してるなw
すまぬ
177:デフォルトの名無しさん
08/06/05 00:09:02
=>
C++のテンプレートの特殊化みたいなものか
演算子は定義されているけど特定の型じゃないと
処理できない場合、特定のの変数を特殊化すること
あるけど
178:初心者修業中
08/06/05 00:54:30
>>177
日本語でお願いしますm(_ _)m
179:デフォルトの名無しさん
08/06/05 08:24:10
Haskellian ももうブランドではなくなりましたね…
メジャーになった証か
180:デフォルトの名無しさん
08/06/05 08:41:12
=> の意味は総称型に制限を与える、じゃだめなのかなぁ。
質問、というより興味本位のアンケート。
あなたが思うhaskellの面白いところってどこですか?
181:デフォルトの名無しさん
08/06/05 09:05:56
アホな質問するスレがあるところ
182:デフォルトの名無しさん
08/06/05 16:59:32
堅い言語なのに簡潔に書けるようになってるところが面白いと思うし、すごく好きだ
記号を多用してたり、インデントを使ってたり
183:デフォルトの名無しさん
08/06/05 18:54:01
「haskell使ってる」と言うと、みんなに尊敬して貰えること
184:デフォルトの名無しさん
08/06/05 19:19:05
>>180
高速化を考え出すと、すごくたいへんなところ。
185:デフォルトの名無しさん
08/06/05 21:02:04
[(x,y) | x + y = 10]
186:デフォルトの名無しさん
08/06/05 21:59:49
>>183
このスレ見てたらそう思えんわな、、、
187:デフォルトの名無しさん
08/06/05 22:55:55
知らない人は知らないし、知ってる人はわかるもんな
しかしいい言語だ
188:デフォルトの名無しさん
08/06/05 23:02:27
汎関数系の言語はC++もそうだが、
かなり野心的な言語設計になるね。
クラス囲い込み度が低いからだろうか。
189:デフォルトの名無しさん
08/06/05 23:56:07
>>185
そんなのできたの!?と思って ghci で試したらできなかった。
ちょっと悲しくなった。
190:デフォルトの名無しさん
08/06/06 00:00:22
インデントがよくわからなくて
エラーでていらつく
なんとかならんのかね?この糞言語
インデント制約糞なら最初からなんか
そういう機能入れろよなぁ
あーあー世界で最悪の糞言語だね
インデントのせいだけで
191:デフォルトの名無しさん
08/06/06 00:12:41
>>190
そういう説もあります。
そうでないという説もあります。
192:デフォルトの名無しさん
08/06/06 00:29:14
インデントがいやなら { } と ; で全部区切ればいいじゃん
一緒だよ
193:デフォルトの名無しさん
08/06/06 00:37:44
traceの使い方qsortのサンプル使って
教えてくれませんか?
qsort _ [] = [] (1)
qsort f (x:xs) = before ++ (x : after) (2)
where before = qsort f (filter (not . (f x)) xs) (3)
after = qsort f (filter (f x) xs) (4)
どこにいれればいいのやらw
194:デフォルトの名無しさん
08/06/06 03:41:00
それを見つけるのにもtraceが役立つのではないか
195:初心者修業中
08/06/06 05:35:07
>>193
私はまだtraceに手を出すつもりはありませんが、
ググってみました。
参考になるでしょうか…?
↓
第15回 Haskellでのデバッグのコツをつかむ
URLリンク(itpro.nikkeibp.co.jp)
import Debug.Trace
quicksort[] = []
quicksort(x:xs) =
trace ("x." ++ show x) $
trace ("x." ++ show x ++ " > y." ++ show losort) $
trace ("x." ++ show x ++ " <= y." ++ show hisort) $
losort ++ [x] ++ hisort
where
losort = quicksort [y|y <- xs, y < x]
hisort = quicksort [y|y <- xs, y >= x]
Main> quicksort [3,2..1]
x.3
x.2
x.1
x.1 > y.[]
x.1 <= y.[]
x.2 > y.[1]
x.2 <= y.[]
x.3 > y.[1,2]
x.3 <= y.[]
[1,2,3]
196:デフォルトの名無しさん
08/06/06 07:41:25
[(x,y) | x <- [1..], y <- [1..], x+y = 10]
197:初心者修業中
08/06/06 08:06:28
>>196
これ、やってみたけど止まりませんね…。
*Main> take 10 [(x,y)|x<-[0..],y<-[0..],(x+y)==10]
[(0,10)
x=0 のままyの無限リストを検索してるから当たり前ですけど…
*Main> take 10 [(x,y)|x<-[0..],y<-[0..]]
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9)]
↓みたいなリストを返す簡単な方法ありますかね…?
[(0,0),(1,0),(0,1),(2,0),(1,1),(0,2).....]
198:初心者修業中
08/06/06 08:42:12
こんなもんかな…
tlist::[(Int,Int)]
tlist = concatMap (\n ->f n) [0..]
where f = \n->take (n+1) $ iterate (\(x,y) ->(x-1,y+1)) (n,0)
*Main> take 10 tlist
[(0,0),(1,0),(0,1),(2,0),(1,1),(0,2),(3,0),(2,1),(1,2),(0,3)]
*Main> take 10 [(x,y)| (x,y)<-tlist, (x+y)==10]
[(10,0),(9,1),(8,2),(7,3),(6,4),(5,5),(4,6),(3,7),(2,8),(1,9)]
199:デフォルトの名無しさん
08/06/06 08:43:25
つまらない答えだが
[(x,y) | k <- [0..], x <- [0..k], y <- [0..k], x + y == k]
200:デフォルトの名無しさん
08/06/06 08:52:37
つまらないのならこれが一番
[(x, 10-x) | x <- [0..10]]
201:デフォルトの名無しさん
08/06/06 08:54:12
>>199
間違ってるやん!
202:デフォルトの名無しさん
08/06/06 09:51:55
[(a,b) | x <- [0..], y <- [0..x], x + y == 10, (a,b) <- [(x,y), (y,x)]]
こんなんできたっけ
203:デフォルトの名無しさん
08/06/06 09:52:48
なんだ(a,b)って t <- [(x,y), (y,x)]
204:デフォルトの名無しさん
08/06/06 10:16:24
>>190
Pythonに見られるインデントによる制御構造の是非
スレリンク(tech板)l50
205:初心者修業中
08/06/06 14:27:09
>>202-203
なるほど、そういう事もできるのですね。
*Main> take 12 [t | x <- [0..], y <- [0..x], (x+y)==10, t<-[(x,y),(y,x)]]
[(5,5),(5,5),(6,4),(4,6),(7,3),(3,7),(8,2),(2,8),(9,1),(1,9),(10,0),(0,10)]
リストモナドの>>=はconcatMapでしたもんね。
勉強になります。
(5,5),(5,5)がだぶってるのが、おしいですね。
206:デフォルトの名無しさん
08/06/06 15:16:52
GHC 6.8.3 まだー?
207:デフォルトの名無しさん
08/06/06 18:05:51
>>206
作って公開してくれ。
208:デフォルトの名無しさん
08/06/07 00:31:44
無明関数って何がうれしいの?
209:デフォルトの名無しさん
08/06/07 00:52:24
いちいち関数の名前考えなくても良い
名前をつけるまでもない単純な関数を作る時に便利
210:デフォルトの名無しさん
08/06/07 01:08:37
名前を付けることは名前空間を汚染すると言うこと
名前よりも式そのもののほうが理解しやすい場合もある
211:デフォルトの名無しさん
08/06/07 01:24:35
getChar >>= \a -> getChar >>= \b -> putChar b >> putChar a
こういうのに名前つけるのはいやだな
212:デフォルトの名無しさん
08/06/07 02:04:23
>>208
そういう話題は関数型言語スレのほうが向いている。
関数型言語一般について語れるよ。
213:デフォルトの名無しさん
08/06/07 02:12:55
>>208
どんなバックグラウンドをもってる?関数型言語についての経験は?
手続き型の国の人ならば、わかりにくいところやね。
関数を変数でもたすってのは関数型では日常茶飯事なんですわ。
そこに便利さのヒントがアルよ。
214:デフォルトの名無しさん
08/06/07 07:57:49
map (\(a, b) -> a+b) [(1,1), (2, 3) ..]
215:デフォルトの名無しさん
08/06/07 10:56:31
>>213
手続きの国からワープしてきたのですが
関数を変数にするならポインタ渡せばよくないですか?
そうすれば、定義しても渡せますよね?
216:デフォルトの名無しさん
08/06/07 11:20:46
名前があってもなくてもポインタ渡すのです
関数オブジェクトは、メソッドがひとつしかないクラスのインスタンス、に似ています
インスタンスに名前がついているとは限らないのです
217:デフォルトの名無しさん
08/06/07 11:33:06
>>216
よくわからないぉ
もう少し詳しく説明してぉ?
218:デフォルトの名無しさん
08/06/07 11:43:32
無明関数…悟りでも得たいのか?
219:デフォルトの名無しさん
08/06/07 11:46:43
>>218
間違えただけだぉ気にしないで
220:デフォルトの名無しさん
08/06/07 11:47:44
>>218
悟りは得るものではなく開くものです。
221:デフォルトの名無しさん
08/06/07 12:06:14
名前を考えるのが面倒くさい
再利用しない
定義している箇所を探すのが面倒くさい
関数内部の処理が簡潔
のときは無名関数使いたくならないか?
222:デフォルトの名無しさん
08/06/07 12:14:34
つーか、関数本体そのものずばりを一覧できる状態で渡しているのにわざわざ名前をつける必要があるのだろうか
223:デフォルトの名無しさん
08/06/07 12:28:02
カリー化
(new Satori(x)).open(y)
224:デフォルトの名無しさん
08/06/07 12:43:21
無名関数で再帰するにはどうすればいいですか
たとえば、
f n = if n == 1 then 1 else n * f (n-1)
はどのように書けばいいですか?
225:デフォルトの名無しさん
08/06/07 12:46:45
fix (\f n -> if n == 1 then 1 else n * f (n-1))
むみょーん。Haskellian じゃないから fix があるかどうかシラネ
226:デフォルトの名無しさん
08/06/07 12:49:20
型無し言語なら
(\f -> f f) (\f n -> if n == 1 then 1 else n * f f (n-1))
227:デフォルトの名無しさん
08/06/07 12:54:26
あー、でも f って名前つけちゃったな
228:デフォルトの名無しさん
08/06/07 13:11:01
>>225-226
ここはHaskellのスレですよ
229:初心者修業中
08/06/07 13:17:55
>>225
Control.Monad.Fix にありますね。
fix :: (a -> a) -> a
fix f = let x = f x in x
230:デフォルトの名無しさん
08/06/07 13:22:40
>>224
不動点演算のfixを使うようです。
Prelude> Control.Monad.Fix.fix(\f n -> if n == 1 then 1 else n * f (n-1)) 5
120
231:デフォルトの名無しさん
08/06/07 14:00:44
(\y f -> f (y f)) (\y f -> f (y f)) (\y f -> f (y f)) (\y f -> f (y f)) ...
232:デフォルトの名無しさん
08/06/07 14:16:56
>>224
... f ...
where f n = if n == 1 then 1 else n * f (n-1)
局所的な関数定義で代わりになるんじゃないの、というのはダメかな
233:デフォルトの名無しさん
08/06/07 16:01:17
>>232に同意
234:デフォルトの名無しさん
08/06/07 16:19:36
名前が付いてるからダメ
235:デフォルトの名無しさん
08/06/07 16:37:58
... (f where f n = if n == 1 then 1 else n * f (n-1)) ...
こうかー
236:デフォルトの名無しさん
08/06/07 17:21:15
>>235
whereが作るのは式じゃなくて節だから使える場所が決まってる(定義の後とかcase選択肢の後とか)
... (let f n = if n == 1 then 1 else n * f (n-1)) in f) ...
ならおk
237:デフォルトの名無しさん
08/06/07 17:22:54
閉括弧が一個多かった
... (let f n = if n == 1 then 1 else n * f (n-1) in f) ...
238:デフォルトの名無しさん
08/06/09 21:46:25
The Haskell School of Expressionで勉強してます。
この本の解答集のようなもの、ネットには無いでしょうか。
URLリンク(www.elbeno.com)
↑このページは参照してますけど、11章までなので、全部が
まとまったのがあると嬉しいです。
239:デフォルトの名無しさん
08/06/16 14:44:56
ポイントフリースタイルについて質問なんですが、
Haskellでは原理的にどんな関数でもポイントフリースタイルに
変形可能なのでしょうか。
240:デフォルトの名無しさん
08/06/16 15:00:34
うん
241:デフォルトの名無しさん
08/06/16 18:48:23
>>239
Sコンビネータとかもポイントフリーに出来るんだっけか?
242:デフォルトの名無しさん
08/06/16 18:52:01
どの範囲の関数まで使用を認めるかによるな
>>241
Control.Monad.ap :: (Monad m) => m (a -> b) -> m a -> m b
を(->) rモナドについて使えば、Sコンビネータそのもの
243:デフォルトの名無しさん
08/06/17 22:58:00
ポイントフリーのポイントって何?
何が自由なの?
244:デフォルトの名無しさん
08/06/17 23:28:00
ポイント = initial objectからのarrow
ポイントフリースタイル = ポイントを使わない関数定義
245:デフォルトの名無しさん
08/06/18 00:11:23
(Monad m) => m (a -> b) -> m a -> m b
これって未だによくわからないけど
手計算できそうな実例ないですか?
246:デフォルトの名無しさん
08/06/18 00:28:46
あんまり意味ないけど↓こんなのとか?
f :: Monad m => m (a -> b) -> m a -> m b
f mg mx = do { g <- mg; x <- mx; return $ g x }
test1 = f Nothing (Just 1)
test2 = f (Just succ) (Just 2)
test3 = f (Just id) Nothing
test4 = f [] []
test5 = f [id] [5]
test6 = f [id, succ, (* 2)] [6, 9]
247:デフォルトの名無しさん
08/06/18 09:12:38
GHC 6.8.3リリース
248:デフォルトの名無しさん
08/06/18 11:53:17
ナイス
249:デフォルトの名無しさん
08/06/18 14:40:13
>>244
initial object(始対象)じゃなくて terminal object(始対象)だお。
集合の圏で terminal object からの arrow というと一点集合に相当する。
集合の圏では任意の一点集合 x に対して f x = g x ならば f = g
「point(一点集合)を使わずに関数が等しいことを表現できる」=>「ポイントフリー」ということだと思う。
250:デフォルトの名無しさん
08/06/18 18:25:28
>>249
失礼、書き間違えた。
terminal object(終対象)だな。
251:249
08/06/18 18:26:24
× terminal object(始対象)
○ terminal object(終対象)
だった。
252:デフォルトの名無しさん
08/06/20 11:33:25
俺やべぇ
気がついたらポイントフリースタイルで5行も書いてたぜ
これはもはや関数型スパゲッティだな
253:デフォルトの名無しさん
08/06/20 12:48:07
任意のλ式はSKコンビネータで書き換えられるとか言うのを見て
実際に適当なλ式で変換してみたら出てきた式はとても読める
代物ではなかったのを思い出した
254:デフォルトの名無しさん
08/06/20 15:00:42
ありゃ一種の難読化だよな
255:デフォルトの名無しさん
08/06/20 18:06:18
>>253
SKコンビネータも、名前付きにできると若干読みやすそうだけど。
っていうか、それが出来たら、どんな高級言語とも変らんという話になって、逆に面白さがないか。
256:デフォルトの名無しさん
08/06/20 19:22:12
>>255
そこでunlambdaですよ!
257:デフォルトの名無しさん
08/06/21 00:27:42
>>255
つ super combinator
258:デフォルトの名無しさん
08/06/22 17:45:00
以下の関数fをもっと簡単にする方法ありませんか?
f [] = []
f (_:[]) = []
f (x:xs) = (x, head xs) : f xs
259:デフォルトの名無しさん
08/06/22 17:52:53
簡単に、というより再帰を使わずにできませんか?
260:デフォルトの名無しさん
08/06/22 18:05:14
f xs = zip xs (tail xs)
261:デフォルトの名無しさん
08/06/23 18:15:27
f xs = zip xs (drop 1l xs)
262:261
08/06/23 19:03:55
すまん。tail の l を残してしまった。
f xs = zip xs (drop 1 xs)
263:デフォルトの名無しさん
08/06/23 19:21:38
zip [] ⊥ = []
らしいから>>260と>>261は等価かな
こういうのを意識しないといけない場面だと非正格性が気持ち悪い
264:デフォルトの名無しさん
08/06/24 00:09:28
>>263
⊥って勃起してるのw?
265:デフォルトの名無しさん
08/06/24 01:03:13
いやむしろ tail で書けて気持ちいいだろ。
266:デフォルトの名無しさん
08/06/24 06:18:25
>>265
でも
zip (tail xs) xs
と
zip (drop 1 xs) xs
は等価じゃない
つまり、zipでは第一引数が先に評価されるということを覚えていないといけない分、ややこしい
(厳密には評価順の問題じゃなくて「zipは第一引数について正格で第二引数について非正格」ということだけど)
267:デフォルトの名無しさん
08/06/24 07:48:57
>>266 どういうこと?
例えば
f (x1 : x2 : x3 : xs) -> x1 + x3
だったら、引数のリストの最初の要素と3番目の要素について正格ってこと?
268:デフォルトの名無しさん
08/06/24 08:32:09
>>267
そういうつもりで「正格」という言葉を使った
269:初心者修業中
08/06/24 09:53:02
関数結合の(.)って優先順位が高いので、
どうしても括弧が増えて見ぐさい気が…。
こんなのがあったら便利だと思うんですけど、
↓
infixr 1 $.
($.)=(.)
こんな感じ
↓
sigma = tail $. scanl (+) 0
標準ではなさそうなんですが、
やっぱ、問題ありですかね?
270:デフォルトの名無しさん
08/06/24 09:55:22
慣れの問題
271:初心者修業中
08/06/24 10:13:14
ああ、勘違いしてました。
関数の優先順位はどの演算子よりも上ですね。
これで問題ないのか
↓
sigma = tail . scanl (+) 0
>>270
レスありがとうございます。
早く慣れたいです。
まだ、頭で考えないとよくわからない。
(考えてもわからない時ありw)
272:デフォルトの名無しさん
08/06/24 11:35:10
>>266
「厳密には」も何も最初っからそう
273:デフォルトの名無しさん
08/06/24 12:56:24
>>266
> 覚えていないといけない
覚えてなくてもプログラム書くのにはなにも困らない。
等価性とか考えだすと全部正格のほうが楽かもしれんけど。
274:デフォルトの名無しさん
08/06/24 18:49:23
>>273
書くときは良くても読むとき困る
例えば>>260のコードが空リストに対しても正しく動作するかどうか確かめるのに、
いちいちPreludeの仕様を読まないといけない
zipみたいに明確な定義のある関数ならまだいいけど、
例えばhPutStrLn undefined ""の値が
1. ⊥
2. 実行時にエラーになるアクション
3. ()を返すアクション
のどれになるかは仕様では決まっていないはずで、ちょっと厄介
275:デフォルトの名無しさん
08/06/25 15:42:16
>>274
その辺は想像で読めば十分じゃない?
zip xs (tail xs) とあって、
コードを書いたのが信頼できる人なら、
zip は第二引数について非正格なのだろうな、とか。
hPutStr undefined "" も、
hPutStr _ "" = return () と定義されては無いだろうし、
undefined が正しいハンドルじゃないからと
hPutStr が独自にエラーを出すというのも、
先に undefined が評価されるから有り得ないだろう、とか。
hPutStr (error "1") (error "2") にしても error "1" だろう、とか。
276:デフォルトの名無しさん
08/06/25 15:49:33
ム板のやつらはなんでこんなに視野が狭いんだろうといつも思う。
277:デフォルトの名無しさん
08/06/25 17:38:53
3の場合
main「ちょっと undefined に "" 出力してこい」
hPutStrLn「へい」
...数十ns後
hPutStrLn「やってきやした」
main「おまwwww改行どうしたwwwwwwww」
>>276
正直くだらないネタ以外はここではなく他の所に書く。
278:デフォルトの名無しさん
08/06/25 18:27:02
質問です
HaskellでGPGPU関連の話題ってありませんか?
279:274
08/06/25 20:23:02
すまん、hPutStrLnじゃなくてhPutStrじゃないと話が合わないな
>>275
>コードを書いたのが信頼できる人なら、
勉強のためにコードを読んでるならいいけど、
レビューとかデバッグとかしてるならそうはいかないだろ
>hPutStr が独自にエラーを出すというのも、
誤解させたかもしれんが、HugsもGHCも2.の振る舞いをする
実行した時点でundefinedが評価されてエラー発生ね
でも、例えば最適化のために
hPutStr h s = seq h $ ...
みたいな実装になってたら1.だし、
hPutStr h s = mapM_ (hPutChar h) s
みたいな定義が考えられる以上3.もあり得なくはない
結局、非正格がデフォルトなせいで関数の仕様に書かなければいけない事項が多いのが問題
それを不用意にうやむやにすると関数の振る舞いが実装に依存してしまう
それほど頻繁に問題になることではないけど、たまに面倒
280:275
08/06/25 21:28:51
>>279
> レビューとかデバッグとかしてるならそうはいかないだろ
うん。
> hPutStr h s = mapM_ (hPutChar h) s
> みたいな定義が考えられる以上3.もあり得なくはない
なるほど。
> それほど頻繁に問題になることではないけど、たまに面倒
そういうこったね。
281:275
08/06/25 21:32:14
> 誤解させたかもしれんが、HugsもGHCも2.の振る舞いをする
> 実行した時点でundefinedが評価されてエラー発生ね
そういうつもりでしたか。
ちなみにそれだと1.はどういうつもりだったのですか?
282:デフォルトの名無しさん
08/06/25 21:49:44
>>281
hPutStr undefined "" `seq` 0
を評価してエラーが発生すれば1.だよな
実際試したらHugsでもGHCiでもエラーは発生しなかった
283:275
08/06/25 22:26:04
なるほど。というか>>279をちゃんと読んでませんでしたごめんなさい。
284:デフォルトの名無しさん
08/06/26 21:37:05
一通りよく取り上げられる教科書は読んだんですが、Arrowなどの
比較的新しい技法についてわかりやすく書かれた文書はどの辺
でしょうか。
285:デフォルトの名無しさん
08/06/26 23:11:25
本家から辿って論文を読むのがいいと思うよ。
286:デフォルトの名無しさん
08/06/26 23:16:36
Arrow アーーー
287:デフォルトの名無しさん
08/06/26 23:28:26
arrowねぇ・・・イマイチだねぇ・・・
プログラミング的にはこれといってメリットないよ。
288:デフォルトの名無しさん
08/06/27 00:23:45
>>284
URLリンク(www.haskell.org)
289:デフォルトの名無しさん
08/06/28 00:05:34
arrowで量子コンピュータのシミュレーションやってます
めっちゃべんりですっっっっs
290:デフォルトの名無しさん
08/06/28 01:15:42
ユニタリ変換の理解が一つの山かも。
291:デフォルトの名無しさん
08/06/28 01:22:40
ユニタリ変換?高校生でも知ってるよ
292:デフォルトの名無しさん
08/06/28 10:42:43
皆さん、エディタは何使って書いてますか?
293:デフォルトの名無しさん
08/06/28 10:48:09
emacsしか選択肢ないんじゃね?
eclipseは糞だし。
294:デフォルトの名無しさん
08/06/28 11:10:10
vim
295:デフォルトの名無しさん
08/06/28 11:45:12
notepad.exe
296:デフォルトの名無しさん
08/06/28 12:32:37
vimやemacsだと使い勝手のいいプラグインあるんでしょうか。
自分もEclipseはちょっと嫌ですねぇ。
297:デフォルトの名無しさん
08/06/28 12:44:03
URLリンク(www.haskell.org) その他いろいろ
$ hugs -Evim
298:デフォルトの名無しさん
08/06/28 16:06:10
Haskellの構文解析ってどういう風な作りになってるん?
結合性宣言があったりするので、
トークン読んだ時点では構文木を作れないような気がするんだけど。
何かの資料とか、HugsやGHCでの実現方法のソースとかあったら教えてくだしあ
299:デフォルトの名無しさん
08/06/28 16:38:24
>>298
GHCはとりあえず全部左結合として解析(parser/Parse.y)して、
後のrenameのパスで結合性宣言をもとに組み立て直してる(rename/RnExpr.lhs)
300:デフォルトの名無しさん
08/06/28 16:57:55
>>292
俺もvimだわ
なんか文法と相性良さげだし
301:デフォルトの名無しさん
08/06/28 17:16:47
>>299
そういう手があったか。いや、全然関係ないパーサを先日作ってたんだが。
パス(1パスコンパイラとか2パスコンパイラとかのパス)にこだわっていては
非富豪的かねぇ。
302:デフォルトの名無しさん
08/06/28 18:10:34
左結合にするってのは、
とりあえずリンクトリストにしといてから、
あとでパーズしなおすって事。
303:デフォルトの名無しさん
08/06/28 18:39:00
>>292 俺はAgda使ってるよ。結構使いやすい。
304:デフォルトの名無しさん
08/06/28 20:10:12
project eulerに接続できねーぞ!!!
どうなってんだ糞
305:デフォルトの名無しさん
08/06/28 20:19:06
質問です
グラフの研究で路線データ(や道路のデータなど)が使いたいのですが、
そういうデータを手に入れるにはどうすればいいですか?
306:デフォルトの名無しさん
08/06/28 21:47:48
>>305
質問です
Haskellと関係ありますか?
307:298
08/06/28 22:27:19
>>299,302
thx、参考になった。
細かく追えてないけど、かなりがんばらないとparseできないってことか。
308:デフォルトの名無しさん
08/06/29 08:23:28
とりあえず左結合って要するにS式だよね。
309:デフォルトの名無しさん
08/07/01 18:44:49
Real World Haskell
URLリンク(www.amazon.co.jp)
> This easy-to-use, fast-moving tutorial introduces you to functional
> programming with Haskell. Learn how to use Haskell in a variety of
> practical ways, whether it's for short, script-like programs or large
> and demanding applications.
310:デフォルトの名無しさん
08/07/02 02:44:41
中身読めるよ
URLリンク(book.realworldhaskell.org)
表紙が決まったんだね。ヘラクレスオオカブト?
311:デフォルトの名無しさん
08/07/02 03:40:51
後の兜本である。
312:デフォルトの名無しさん
08/07/02 22:40:44
オライリーからHaskellの本が出るなんてありえない。
そう思っていた時期が僕にもありました
313:デフォルトの名無しさん
08/07/02 23:40:42
2008/09
ちょおまw
314:デフォルトの名無しさん
08/07/04 04:55:50
>>310
全30章中残りは3章。
20. The foreign function interface
27. Profiling and tuning for performance
30. A concurrent RESTful web application
書きにくそうなのが残った感じw
315:デフォルトの名無しさん
08/07/09 08:14:01
初心者用のスレで関数型の話をすると罵られる。なぜだろう。
316:デフォルトの名無しさん
08/07/09 12:30:55
初心者には関数型が高尚すぎて理解できないからです。
317:デフォルトの名無しさん
08/07/09 22:36:35
しつもんです
らむだけいさんってなんですか?
318:デフォルトの名無しさん
08/07/09 23:38:52
世界遺産の一種です
319:デフォルトの名無しさん
08/07/09 23:44:40
URLリンク(wwwfun.kurims.kyoto-u.ac.jp)
320:デフォルトの名無しさん
08/07/10 05:32:31
全部ひらがなだとぱっと見、人名かなんかかと思った。羅武田圭さんとか。
321:デフォルトの名無しさん
08/07/10 16:58:13
俺がムラタだ
322:36 ◆K0BqlCB3.k
08/07/11 01:58:31
URLリンク(hackage.haskell.org)
とっとと仕事しろやボケ
323:デフォルトの名無しさん
08/07/11 09:38:42
まあ遅延評価だから
324:デフォルトの名無しさん
08/07/11 10:04:21
等無駄計算
325:デフォルトの名無しさん
08/07/11 16:03:12
>>322
なにエラソーに言ってんだよ。しょーもない評論家なくせして。
326:デフォルトの名無しさん
08/07/19 00:59:56
名村啓?
327:デフォルトの名無しさん
08/07/20 23:31:18
do記法で
'aとか''aとか出てきますが
どのような意味なのでしょうか
328:デフォルトの名無しさん
08/07/21 01:16:27
>>327
具体的なコード書いてみて
329:デフォルトの名無しさん
08/07/21 15:09:50
>>327
a'とかa''じゃなくて?
ちなみにそれならただの変数名だよ。
330:デフォルトの名無しさん
08/07/21 15:13:03
>>329
見直したらそうでした
許してくださいw
ごめんなさい
331:デフォルトの名無しさん
08/07/21 23:32:45
\_ -> k
この\_ってC++のtemplate <t>みたいなもんですか?
332:デフォルトの名無しさん
08/07/21 23:38:07
全然違います
333:デフォルトの名無しさん
08/07/21 23:43:54
>>332
じゃあ何なのでしょうか?
334:デフォルトの名無しさん
08/07/21 23:55:35
URLリンク(www.codelogy.org)
ていうかなんか一冊入門書買うことをおすすめする
335:デフォルトの名無しさん
08/07/22 01:00:32
なんか夏まっさかりって感じ?
336:デフォルトの名無しさん
08/07/22 01:40:52
質問の仕方スレもいるな
Haskellでぐぐっていくつか読めばわかるぐらいのことで
これって型でしょ
違います
じゃあなんなんだよ
つ やさしいHaskell入門
337:デフォルトの名無しさん
08/07/26 19:44:30
おい、おまえらの仲間が「初心者のための~」スレで暴れてるから早く回収してくれ
338:デフォルトの名無しさん
08/07/26 20:22:33
狂犬に噛まれて狂犬が増えるって
怖くね?
339:デフォルトの名無しさん
08/07/27 01:34:24
あれは仲間じゃない
340:デフォルトの名無しさん
08/07/27 02:01:40
そもそもスレタイからして興味ない話だし。
向こうで完結して。
341:36 ◆K0BqlCB3.k
08/07/27 02:23:52
さて、この夏、何かおもしろいことでもしようかな。
342:デフォルトの名無しさん
08/07/27 10:47:30
お前らの中にアホがいます
他のスレを荒らすならここを荒らしますよ?
343:デフォルトの名無しさん
08/07/27 12:10:53
>>342
ほー、やってみてください。本当にできるのですか?
344:デフォルトの名無しさん
08/07/27 13:11:28
夏厨誕生物語
A 「この夏、何かおもしろいことでもしようかな。」
B 「ならスレ荒らししてみれば?」
A 「簡単にできるのですか?」
B 「こうやれば邯鄲」
A 「ネ申キター!㌧!マジ面白いね。他スレ荒らしてクルーwktk」
345:デフォルトの名無しさん
08/08/06 05:48:39
注目ワード“高階プログラミング”って何だ?
URLリンク(ascii.jp)
346:デフォルトの名無しさん
08/08/06 06:00:24
>>345
面白かった。サンクス。
347:デフォルトの名無しさん
08/08/06 19:32:59
仕事でHaskellできるなんて羨ましいなぁ。
348:デフォルトの名無しさん
08/08/06 20:30:02
>>345
nobsunだね。
349:デフォルトの名無しさん
08/08/06 20:47:23
ハイカラなシャツ着てる
350:デフォルトの名無しさん
08/08/06 22:06:03
この会社ってホームページ見た感じ普通のSI会社に見えるけど、
山下さんなんかがいるってことは特殊な会社?
Haskellの開発コンサルということだけど、一般企業の業務システム
なんかを対象にしてるのかな。金融系とか合ってそうだけど、
普通の土方システムには豚に真珠かな。
351:デフォルトの名無しさん
08/08/06 22:30:36
>>350
看板役みたいなものだよ。
よくあること。
SRAでも青木淳みたいなのを雇っているけど、青木は普通の仕事はしていないね。
金にならないことを自由にやっているって感じ。
ちなみに、青木の部下はかわいい女の子限定。
352:デフォルトの名無しさん
08/08/07 05:56:03
まあ、天才ならなんでも許されるってことだ。
353:デフォルトの名無しさん
08/08/07 07:30:34
>>351
青木はSRAやめたよ
354:デフォルトの名無しさん
08/08/07 08:39:56
>>345 nobsunのコードは以前からスゲーと思ってたけど、こんな会社のこんな人なんだ。知らなかった。
会社の事業だけ見ると、Haskell関係なさそうだね。Higher Order Programmingってなんだ?造語か?
もっと記事をよく見てみる。
355:デフォルトの名無しさん
08/08/07 08:55:02
>>354
ちょ、おまwww
356:デフォルトの名無しさん
08/08/07 09:12:13
Higher Order Programming: プログラミングを丸投げするためのプログラムを書くこと
357:デフォルトの名無しさん
08/08/07 09:45:57
継続ベースのWebフレームワークってHaskellにもありますでしょうか。
358:デフォルトの名無しさん
08/08/07 12:53:37
>>350
あそこって、gaucheかんけいなひとがおおそうなんだけど。
359:デフォルトの名無しさん
08/08/07 12:58:00
>>358
そりゃそうだ。普通のJaverやC++マが金を取ってこなきゃ、
みんなgaucheとかに走ったら誰が食い扶持を稼ぐんだって。
360:デフォルトの名無しさん
08/08/07 13:19:40
二等兵には二等兵の仕事があるわな。
361:デフォルトの名無しさん
08/08/07 13:46:18
むしろ、パンダと飼育員。
362:デフォルトの名無しさん
08/08/07 13:54:11
俺はまだ士官候補訓練兵だ
363:デフォルトの名無しさん
08/08/07 16:12:52
あの写真を見て
小野伸二を思い出したんだけど。nobsunはやっぱり天才なんですかね。
364:デフォルトの名無しさん
08/08/07 19:03:09
俺は山田ルイ53世を思い出した。すまん>nobsun
ルネッサ~ンス!
365:デフォルトの名無しさん
08/08/07 19:05:14
あの芸人、この前番組内であからさまにいじめられてたぞ。
最近テレビの前で普通にいじめる先輩芸人が多くないか?
366:デフォルトの名無しさん
08/08/07 19:55:17
そんなことより「Real World Haskell」の発売が10月に延びてる・・・
367:デフォルトの名無しさん
08/08/07 20:41:53
URLリンク(book.realworldhaskell.org)
にある最終章、「A concurrent RESTful web application」が読みたいんだけど、
これは本買わないとダメってこと?
368:デフォルトの名無しさん
08/08/07 21:15:32
最近少しずつ読み進めていたんだが
そうか、本になるのか…買おうかな>RealWorldHaskell
369:デフォルトの名無しさん
08/08/07 23:21:20
RealWorldHaskellってHaskellの批判本なのに
なんでみんな買うの?
こんなにHaskellって腐ってます
ゴミですって随所に書かれているのにw
370:デフォルトの名無しさん
08/08/07 23:24:06
買おうかなと言ったのが一人いるだけなわけだが
脳内カウンターが回りまくりですかな
371:デフォルトの名無しさん
08/08/08 00:09:00
ん?批判本なんだ?
372:デフォルトの名無しさん
08/08/08 00:12:48
そう思っている人がいるかどうかは定かではないですが、
そう書き込んだ人間が一名いるようです。
また、買おうかなと書き込むことと買うことは別です。
プログラマたる者、このくらいの論理性は持って欲しいです。
部分と全体を混同するなんて、継承に毒されすぎです。
373:デフォルトの名無しさん
08/08/08 02:02:00
>>372
論理じゃなくて、揚げ足取りっていいませんか?
買おうかなと書き込んだということは、買う意思が比較的強いということでしょう。
0か1かじゃないんですよ。
物事は確率的なのです。
374:デフォルトの名無しさん
08/08/08 02:42:06
>>373
> 買おうかなと書き込んだということは、買う意思が比較的強いということでしょう。
著作権者や出版社勤務者が宣伝のために書いたかも知れませんよ
375:デフォルトの名無しさん
08/08/08 02:42:51
>>374
そういう可能性もある。
確率の問題。
376:デフォルトの名無しさん
08/08/08 02:50:39
>>369
ソース
>>370
君が一人しか見てないだけ
377:デフォルトの名無しさん
08/08/08 03:20:20
>369
>Throughout this book, we're going to show you how Haskell's
alternatives to the features of traditional languages are more
powerful, more flexible, and safer. Haskell is positively crammed
full of cutting edge ideas about how to create great software.
(chap1 power)
と最初のところでかいてるけど、なぜ批判本と?
どこをさしていってるの?
378:デフォルトの名無しさん
08/08/08 03:22:29
なんとなくpractical common lispのhaskell版と言う印象なんだけどな。
オレイリーから関数型言語ぼんが出るのは初めてじゃ内科?
国内ではgauche本があるがね。
379:デフォルトの名無しさん
08/08/08 03:42:03
フランスではocamlの本が出てた
380:デフォルトの名無しさん
08/08/08 11:58:00
washって継続ベースなの?
381:デフォルトの名無しさん
08/08/08 14:34:11
>>379マジだ
URLリンク(www.amazon.fr)
フランスでは流行ってるんだな
382:デフォルトの名無しさん
08/08/08 14:42:46
感覚的には日本のRubyと同じ感じじゃないすかね。
383:デフォルトの名無しさん
08/08/08 16:16:02
>>381
いつの本の話してんだか。
この本の和訳プロジェクトはつぶれたね。
384:デフォルトの名無しさん
08/08/08 19:15:39
>>382
全然違う。Rubyは世界的にPythonを急追している。
385:デフォルトの名無しさん
08/08/08 23:55:14
急追して、、いたけど結局ダメだった、というのが現在のところだよ
俺も1.9がちゃんとしたモノになるまではrubyは使うべきではないと思う。
386:デフォルトの名無しさん
08/08/08 23:59:16
そうか?
そもそも本当に10月に発売できるか分からんぞ。
387:デフォルトの名無しさん
08/08/09 00:21:55
コレすでに3回発売日伸びてる
年内出れば御の字
388:デフォルトの名無しさん
08/08/09 00:33:37
>>385
それがほんとかなぁ。とおもってgoogle trendsでruby,python,perlの検索数を比較させて
みたけど、国によって微妙に違うね。
usaなら、2006ねんごろからperlが凋落しきって、python,rubyとならんで、2006中頃から、
rubyが一歩抜けて、perl,pythonが同等になっていた。
italyは、同じような時期にperlが落ちてきてるけど、pythonがかなり強くって、perlとruby
が同等
japanが、perlの凋落が進んできてるけど、usaやitalyほどではなくて、一番ですね。2番め
がrubyで徐々に増えてる。pythonは完全に横ばい。
chinaはpythonの伸びがかなり強い。そんなにrubyは使われてない。
indiaは日本と傾向が似てるな。
israelはrubyは絶滅ぎみ。
google全体ではrubyが一番強くなってきてるけど、これはusaでのruby人気が支えてる
ような感じだな。europaとchinaではpythonが強く、それ以外の国ではperlが強いかな。
389:デフォルトの名無しさん
08/08/09 04:23:59
>>384
世界的にみても、わかって言語を選んでいる人よりも
バズワード追ってるだけの人のほうが多いからね。
390:デフォルトの名無しさん
08/08/09 06:09:31
Haskellって本当にLLって言っていいのかな。
基本コンパイラだし、インタプリタも軽量とは言い堅いし。。。
391:デフォルトの名無しさん
08/08/09 06:13:31
LLじゃないだろw
392:デフォルトの名無しさん
08/08/09 08:06:03
> 基本コンパイラだし
GHCばかり取り上げられてHugs涙目
393:デフォルトの名無しさん
08/08/09 08:07:11
>>392
そんなあなたをはぐはぐ。w あーっ!ではないよ。
394:デフォルトの名無しさん
08/08/09 08:22:00
初心者なんですが、Haskellが型については静的であることを選択した
理由って何かあるんでしょうか。純粋であることや遅延評価が、静的
型やコンパイル時の最適化を要請するということなんでしょうか?
395:デフォルトの名無しさん
08/08/09 08:27:55
GHCはHaskell解釈系ランキング第一位!
「やっぱりGHCだね」
396:デフォルトの名無しさん
08/08/09 09:06:49
>>394
静的なのは、最適化も大きいだろうけど、
むしろ安全性を狙ってるという要素が大きいんだろう。
遅延評価なのはコンパイル時の最適化にプラスなのかなぁ?
これは理論的に停止できる関数は必ず停止できるっていう、
これまたある種の安全性?が主な目的だと思うけど
( if true (answer foo) (nonStop baa) ) みたいな文を考えよう(Haskellの文法忘れたから適当)。
397:デフォルトの名無しさん
08/08/09 10:14:15
別に"動的型付け-純粋-非正格-インタプリタ型"の関数型言語もあり得るよな
効率はどうなんだろう、"動的型付け-正格"の言語よりさらに遅いことは想像が付くが
398:デフォルトの名無しさん
08/08/09 10:28:23
>>394
Goferがそうだったから。
で、なんでGoferがそうだったのかというと、Mirandaがそうだったから。
399:デフォルトの名無しさん
08/08/09 10:37:45
>>396
遅延評価は最適化にマイナスだよ。少なくともメモリ空間の最適化には全く向かない。
400:デフォルトの名無しさん
08/08/09 10:44:26
遅延評価なんて
今日はやらない
401:396
08/08/09 10:50:37
>>399
そうだよね。
コンパイル技術がすげー発達して高速になれば、話は変わるだろうけど。
(まぁ、コンパイル技術が「すげー発達」すれば、どのコンパイル言語でもマシン語と同じスピードが出るんだから、意味ない話)
あと「理論的に停止できる関数は必ず停止できる」は意味不明だとか、
文じゃなくて式だとか、気づいたけど後の祭り、いわゆるアポステオリorz
402:デフォルトの名無しさん
08/08/09 11:02:51
>>395
Guarded Horn Clauses
403:デフォルトの名無しさん
08/08/09 11:31:02
手続き型言語は、ノイマン型計算機を抽象化することで生まれてきたので、
評価方式としては、式、文の逐次的解釈が当然になる。
関数型言語は、ラムダ式から出て来たから、
その評価形式をどうするかというのが一つのポイントになる。
遅延評価は最左最外簡約の研究から出て来た。
効率がどうのこうのというより、
新しいプログラミングパラダイムを産み出したので、
(例えば無限リスト、無限木の積極的利用)
研究され続けているんだと思う。
404:デフォルトの名無しさん
08/08/09 11:32:55
>>402
GLOBAL HONORED CROWN URLリンク(www.noah.co.jp)
405:デフォルトの名無しさん
08/08/09 11:37:31
関数型とか意味がない言語だと思うけどねぇ
何ができるってわけでもないし
HaskellでWindowsは作れないしLinuxも作れない
Webサーバも作れないしDBも作れない
意味がない
406:36 ◆K0BqlCB3.k
08/08/09 11:44:54
>>405
URLリンク(www.thenewsh.com)
407:36 ◆K0BqlCB3.k
08/08/09 11:45:52
ごめん、今からインディージョーンズ見に行くから急いでるから!
408:デフォルトの名無しさん
08/08/09 11:47:37
まあ普通はモデルを現実に合わせるよな。
代入だらけのプログラムをSSAとかいう形式に変換するとか。
409:デフォルトの名無しさん
08/08/09 11:48:09
>>394
純粋関数型言語・遅延評価で、
型なし・インタプリタ言語ってあるよ。
変態言語 Lazy K がそれ。
ある意味では Make とかもそうかも。
少なくとも、
純粋関数型言語・遅延評価と、
コンパイル言語かインタプリタ言語か
っていうのはあまり関係ない。
純粋関数型言語・遅延評価は、
シンプルな手続き型よりもインタプリタを書くのが難しい、
っていうのはあるかもしれないけど。
純粋関数型言語であることと静的型であることは、少し関係があるかも。
純粋関数型言語でかつ動的型というのは、概念的にあまり良い食い合わせではないとは思う。
動的型っていうのは、関数の世界では「型無し」ってことになると思うんだけど、
いずれにせよアドホックなエラー処理が必要になって、
純粋関数型的にアドホックなエラー処理というのは少なくとも美しくない。
410:デフォルトの名無しさん
08/08/09 12:17:29
>>409
遅延評価でインタプリタ。破壊的関数が作れないというものなら、R言語くらいしか知らない。
411:394
08/08/09 12:56:14
皆さんレスありがとうございます。
論理的に組み合わせ悪いというよりは、静的型のメリットを選んだ
ということなんでしょうか。
静的型VS動的型というのは、安全VS自由ということだと思うんですが、
Haskellは安全を選んだということなのかな。純粋関数型としては、
副作用に関連する不具合から自由なのが売りだと思うので、更に
静的型によって徹底的に信頼性を上げてるという感じなんでしょうか。
>>409
純粋関数型であること(参照透明であること)と動的型が食い合わせ
悪いというのがちょっと分かりませんでした。動的型は実行時不具合
の問題が付きものと思うのですが、参照透明との関係をよろしければ
少し詳しく教えていただけマスでしょうか。
412:デフォルトの名無しさん
08/08/09 13:08:18
そもそも関数型言語に意味が無い
413:デフォルトの名無しさん
08/08/09 13:13:08
>>411
動的型を使うと、アドホックなエラー処理が必要になるよね?
っていうか、それがないと動的型を使ううまみがないと思うんだけど。
ここでいうアドホックなエラー処理っていうのは、
対象オブジェクトの型をプログラムで認識して、
意図しないオブジェクトが来たときにエラー処理するってことだけど。
このエラー処理にIOを使わないなら、
それは多相型やクラスを使っても同じ結果が得られるよね。
だから、Haskellに動的型を組み込む必要性は、
意図しないオブジェクトが来たときIOを使ったエラー処理をしたいときに限られると思う。
で、純粋関数型言語は参照透明性ゆえにIO処理するの苦手。
まぁ、動的型っていうのはプログラム中で型を認識できないと意味ないよね?
っていう時点で、カリー・ハワード対応との関係で微妙っていう気にするけど。
僕が考えているのは、そんな感じ。
414:デフォルトの名無しさん
08/08/09 13:17:44
上っ面を語り合って自己満足か
Haskellに多いやつらの典型だなw
415:デフォルトの名無しさん
08/08/09 13:18:59
グリーンスパンの第10法則が発動すると、どんな言語で書こうと
動的でマルチパラダイムな言語で書いたのと同じになる。
416:394
08/08/09 13:33:07
>>413
なるほど、理解しました。ありがとうございます。
417:デフォルトの名無しさん
08/08/09 13:50:48
>>405
せいぜい生きる力を養ってください
418:デフォルトの名無しさん
08/08/09 13:54:52
>>416
implementationの本を読むといいよ
Peyton Jonesのがpdfで読めるはず
419:デフォルトの名無しさん
08/08/09 14:11:34
>>418
俺はPJのが好きだな。
静的型付けとグラフ簡約が運命的な出会いであることがわかった。
420:デフォルトの名無しさん
08/08/09 14:19:55
>>413
なんか議論が無茶苦茶じゃないか?
例えば「型エラー」を「0除算エラー」に置き換えても論理展開が変わらん
>このエラー処理にIOを使わないなら、
>それは多相型やクラスを使っても同じ結果が得られるよね。
動的型の重要な利点は、型をいちいち書かなくてもいいという利便性だよな
多相型やクラスを使って動的型をシミュレートするのはすごく面倒だから、この利点を享受できない
それから、GHCではerrorやundefinedで発生したエラーをIOモナド上で捕捉できる。念のため
421:デフォルトの名無しさん
08/08/09 14:26:59
だな。Haskellの例外処理で不足があることはそうそうないと思う。
あと、動的型のメリットを例外処理だけに限定するのは視野が狭すぎる。
LISPのメリットはアドホックな例外処理か?そうじゃないと思う。
422:デフォルトの名無しさん
08/08/09 14:39:32
>>420-421
納得できないのなら、それで良いです。
僕も、べつにそんなに優れた論拠だと思ってないから。
423:デフォルトの名無しさん
08/08/09 14:55:35
俺も>>413はひどい文章で内容もないと思う。
>>416が理解したのが驚愕。
424:デフォルトの名無しさん
08/08/09 15:20:10
本当だ、マジで何言ってるのかわからん
すげえ
425:394
08/08/09 15:22:47
動的型のメリットは型を単に書かなくて済むことだとは思えないんですが。
それだけであれば、コンパイルで発見する不具合をテスト時に見つけよう
とする、つまり面倒なことを後回しにしてるだけ、ってことになりませんか?
426:デフォルトの名無しさん
08/08/09 15:23:15
別に動けばいい
427:デフォルトの名無しさん
08/08/09 15:30:45
何でも指せるポインタってのはメチャ便利なんですよ。
S式なんて最たるもので、静的な型付けは不能あるいはワイルドカード的。
静的か動的かはトレードオフの問題。
428:デフォルトの名無しさん
08/08/09 15:42:04
>>425
不具合を見つけるタイミングが遅くなるという対価を払って、記述の利便性および変更の容易さという報酬を得る
ちゃんと取引として成立してるじゃないか
もちろん「型を書かなくて済む」こと以外にも利点はある
特定の静的型付け言語ではそもそも型を付けられないようなコードが許容されるとか
429:デフォルトの名無しさん
08/08/09 17:38:51
>>425
lispを使ってる限りの印象だが
都合のよい所だけ型宣言が出来るというのは柔軟性につながるかな。
プログラムの最適の仕方も静的/動的で違いがあると思うよ。
型なんで考えずにアルゴリズムだけ作っちゃえができるからね。
それでも型を意識したプログラミングをすることはあるが。
でも、haskellでもポリモつかえばある程度型無視ラピッドプログラミング
は可能じゃないか?
430:デフォルトの名無しさん
08/08/09 17:41:42
じゃあOCamlでいいじゃん
431:デフォルトの名無しさん
08/08/09 17:44:14
>>430
haskellって参照透明性ってかなりのメリットだと思ってるけど。
432:デフォルトの名無しさん
08/08/09 17:49:41
注意してかけばいいだけの話
Hashkellはメリットを殺すデメリットしかないだろ
433:デフォルトの名無しさん
08/08/09 17:56:37
正直、exists型が標準になれば動的型付けは不要じゃね?
URLリンク(en.wikibooks.org)
434:デフォルトの名無しさん
08/08/09 17:57:26
>>430
OCamlはstrictだから。残念。
435:394
08/08/09 19:55:26
>>428
コンパイル時に問題が抽出されることと、テストによって抽出されるのでは
質的な違いがあるんじゃないですか?テストは結局は人間がやるものだし、
不具合の可能性を低めるということにしかならないけど、コンパイルでの
不具合検査は対象となるプログラムの論理的正しさを証明していることに
なるかと思います。
容易に変更ができたとして、不具合がどこに潜んでいるのか分かりにくい
というのは非常に問題あると思いますよ。コンパイルで分かるのならば、
これは明白でしかも機械的に全てが晒されますから安心です。
436:デフォルトの名無しさん
08/08/09 20:20:59
Rubyは危険だしセキュリティリスクしか
そんざいしないしな
437:デフォルトの名無しさん
08/08/09 20:23:09
>>435
確かに、バグがどの段階で発見されるかには質的な違いがある
でも、静的な型検査だって全てのバグを検出できる訳じゃないから、
結局、動的検査との安全性の違いは程度問題
その上で、静的な型検査の利点がコストを上回るという判断は当然ありえるし、
そう判断したなら静的型言語を使えばいい
438:デフォルトの名無しさん
08/08/09 20:28:12
>>435
静的型チェック馬鹿ですやん
439:394
08/08/09 20:39:50
>>437
例えば、参照透明ということについてはどうでしょうか?こちらも、副作用を許容
すれば、プログラム中に登場する変数の中身が何に変異しているかどうかが
分からなくなり、実行してみないと問題が検出できない、ということになります。
参照透明を強要するのも、型を強要するのも、結局その辺がクリアできない
プログラマというのはそれらに関連する不具合を出してしまうんだと思いますが
どうでしょうか。気をつければいい、というのは簡単で規模が小さなシステムでは
言えることで、そうでなければ膨大なテスト工程が必要になってしまうのでは?
440:デフォルトの名無しさん
08/08/09 20:46:48
OCamlが参照透明じゃないから嫌ってどういう事を言ってるの?
refとかで破壊的な変数が作れるから嫌とかそういうレベルの話じゃないよね。
それだったらref使わなければいいだけだから。
逆に、Haskellの参照透明で良い所ってどのへんなの?
OCamlのでも、ErlangのでもなくHaskellの参照透明性が良い理由を説明してほしいんだが。
441:394
08/08/09 21:04:32
>>440
参照透明でない、ということは値が望んだ通りの値であることを
保証するためにどこまでも神経質にテストをしなければならない、
ってことですよね。
一人で開発するのであればいいですが、多くの人の手によって
間違いがあってはならないシステムの開発をする際、「それは
禁じ手だから止めてね」と口約束するだけってのは非常に怖い
わけです。だからこそ、テストの工程が膨れ上がる。
Haskellに自分が惹かれている大きな理由の一つは、この辺の
頑固さを貫いていることですね。
442:デフォルトの名無しさん
08/08/09 21:19:02
参照の透明性があれば、
それだけでテストが必要なくなるわけでも、
テストが簡単になるわけでもない。
そうなるのはトイプログラムだけ。
嘘だと思うなら、GHC, Hugsなどのバグトラックをみてみればいい。
443:デフォルトの名無しさん
08/08/09 21:21:51
テストが減ることを数学的に証明してみせれ。
444:437
08/08/09 21:22:55
>>439
何が言いたいのか良く分からん
俺は「気をつければいい」なんて一言も言ってないよ
>>428に書いたように、動的か静的かの間でトレードオフが成立すると言っているだけ
>>441
OCamlの変数は変更不可だよ
変更できるのは参照(ref)で、これは変数とは別物
だから、口約束するまでもなく変数の値が変わらないことは保証されてる
445:デフォルトの名無しさん
08/08/09 21:26:07
>>440
参照透明性を壊さないと入出力できないのが嫌
446:36 ◆K0BqlCB3.k
08/08/09 21:37:36
>>443
数学的に無理だから、統計的に証明するわけですよ。
実際に~~でした、ってね。
ヒューマンインターフェース系の論文が参考になるんじゃないかな。
あっちは全部そんな感じ。
447:デフォルトの名無しさん
08/08/09 21:38:56
>>441
Haskellでもやろうと思えばIORefとかで事実上破壊的な操作が可能になるわけですが、
これについてはどうお考えで?
「HaskellでIORefは使うな」っていうプログラミングルールを設定することは
「OCamlでref使うな」っていうルールを設定することと本質的に違わないと思うんだけど
それについてはどうなんすか。
448:36 ◆K0BqlCB3.k
08/08/09 21:40:14
インディージョーンズ、あれは予算が無いからあんなにちゃっちい水晶髑髏なのか?
どう見てもアクリル製のガワの中に反射板入れただけやん。
UFOとかエイリアンとか、考古学じゃなくてSFやん。
突っ込みどころ満載な映画でした。
かしこ
449:デフォルトの名無しさん
08/08/09 22:13:11
monadとラムダの簡単な練習いっぱい
したいです。どこがいい問題集頂戴
450:デフォルトの名無しさん
08/08/09 22:23:39
>>449
do記法を使わずにliftM、liftM2、joinを実装
Continuationモナドを実装
451:36 ◆K0BqlCB3.k
08/08/09 23:30:03
>>450
また何も考えずにそういうこと言う。
>>449
URLリンク(ja.doukaku.org)
452:36 ◆K0BqlCB3.k
08/08/09 23:31:04
英語が読めるなら
URLリンク(projecteuler.net)
453:デフォルトの名無しさん
08/08/10 05:05:51
>>451
モナドとλの練習なら>>450はいい案じゃないか。
いっぱいじゃないけど質的にいい。
454:デフォルトの名無しさん
08/08/10 05:08:55
そんなことが書きたいんじゃなかった。
>>419
PJのって何?本もpdfもPJのでしょ?