haskell-ja > Archives > 2010/01/25

2010/01/25 07:11:26 UTCcut-sea
#
さて
#
Haskellのコードを音読してみよう!のコーナー
#
x = 1
#
これは「xは1である」おk?
#
y = x
#
なんかちゃんと送信できなくなったお
#
これは「yはxである」おk?
#
f = putStr "Hello"
#
これはなんて読みます?
#
f = getContent
#
これはなんて読みます?
#
main = getContent >>= putStr
#
これはなんと読みます?
2010/01/25 07:30:38 UTCcut-sea
#
acts = [putStr "1", putStr "2", putStr "3"]
#
これはなんとよみます?
#
f = h . g
#
これはどう?
2010/01/25 08:07:58 UTCnobsun
#
f = putStr "Hello" 「f は putStr "Hello"である」
#
f = getConents 「fはgetContentsである」
#
main = getContents >>= putStr 「mainはgetConentents >>= putStrである」
#
f = h . g 「f は h . g」である
#
so what?
2010/01/25 08:16:30 UTCcut-sea
#
まぁ分かってると思うけど、もう一段噛み砕いてほしかった。
#
RWH読書会でコードを音読してて、どうもうまくいえないことが多いんで
#
できればその気持ちで読み方を書いてみて欲しいという
#
ここでは(左辺)=(右辺)を「(左辺)は(右辺)」である
#
という風に=の音読に成功したとしましょう。とりあえず。
#
あ、すまぬ「(左辺)は(右辺)である」だった。括弧のなかに「である」含める
#
その=の音読を保ったままIOモナドを含むケースを音読したら、kazuさんの言う副作用なるものHaskellではがどういう風に「消えるか」「現れるか」が分かるんじゃないかなという思惑(実験)なのです。
2010/01/25 08:22:34 UTCnobsun
#
putStr "Hello"をどう音読するかってこと?
2010/01/25 08:22:37 UTCcut-sea
#
またその場合>>=をどう音読するかとか、同時に.はそれとどう違ってくるかとかね。
#
そっそー
2010/01/25 08:23:16 UTCnobsun
#
putStr "Hello" 「ぷっとすとる へろー」
#
関数適用はそのままになっちゃうなぁ。
#
問題は2項演算子ということかいね?
#
1 + 2 は 「いちたすに」
#
または「いちとにをたしたもの」
2010/01/25 08:26:22 UTCcut-sea
#
それ!
2010/01/25 08:26:22 UTCnobsun
#
h . g は「えいちこんぽーずじー」
2010/01/25 08:26:33 UTCcut-sea
#
そのノリ>「いちとにをたしたもの」
#
z = x + y
2010/01/25 08:26:54 UTCnobsun
#
または「えいちとじーのごうせい」
2010/01/25 08:26:57 UTCcut-sea
#
zはxとyをたしたものである
2010/01/25 08:27:16 UTCnobsun
#
ふむ。
2010/01/25 08:27:29 UTCcut-sea
#
合成であるというのは他の合成がでてきたらなんか微妙じゃん?
#
Bコンビネータ以外の合成がでてきたりとか
#
思ったのは
#
Cのような手続き型であれば
#
x = 1
2010/01/25 08:28:22 UTCnobsun
#
Bコンビネータ以外は関数合成とはいわない。
2010/01/25 08:28:42 UTCcut-sea
#
xという変数に1を代入(格納)する
#
ってふうに読むとかさ
2010/01/25 08:29:07 UTCnobsun
#
composeと、compoundあるいはcombineとは区別すべき。
2010/01/25 08:29:31 UTCcut-sea
#
じゃあSコンビネータの場合とかなんて読むだろう?
#
combineって組み合わせ?
2010/01/25 08:30:35 UTCnobsun
#
zipWith の第一引数のイメージ
#
SICP嫁:)
2010/01/25 08:31:41 UTCcut-sea
#
zipWith (,) [1..]['a'..'z'](処理系ないので正しいかどうか知らんが)
#
これとか「1,2...という列(自然数)と'a','b'...という列(英小文字の列)の対を取ってリストにする」みたいな
#
自然言語にしたら曖昧になっちゃうだろうけど
2010/01/25 08:34:37 UTCnobsun
#
不定詞ではなく。過去分詞にすべきだね。
2010/01/25 08:34:43 UTCcut-sea
#
そんな風にIOを含むコードはどう読むだろう?という
#
というと?
2010/01/25 08:35:35 UTCnobsun
#
〜する → 〜したもの
2010/01/25 08:36:03 UTCcut-sea
#
お、そーゆーところ重要かも
#
「1,2...という列(自然数)と'a','b'...という列(英小文字の列)の対を取ってリストにしたもの」
#
xs = zipWith (,) [1..]['a'..'z'] → 「xsは1,2...という列(自然数)と'a','b'...という列(英小文字の列)の対を取ってリストにしたものである」
#
f = putStr "Hello" → 「fは"Hello"という文字列を●●である」
#
●●はなんだろう??
2010/01/25 08:44:09 UTCnobsun
#
標準出力に印字しようとするもの
2010/01/25 08:45:04 UTCcut-sea
#
「fは"Hello"という文字列を標準出力に印字しようとするものである」
#
f = getContentは「fは標準入力から文字列をよみこもうとするものである」って感じだろうか?
2010/01/25 08:46:29 UTCnobsun
#
そう
2010/01/25 08:47:19 UTCcut-sea
#
ではmain = getContent >>= putStrはどうなるだろう。
#
>>=の部分
2010/01/25 08:51:17 UTCnobsun
#
標準入力から文字列を得ようとするものに、文字列を貰ってそれを標準出力に出そうとするものを構成する関数をむりやり適用しようとするものである。
2010/01/25 08:52:50 UTCcut-sea
#
ああ、なるほど文字列が構成する関数
#
しまった
#
ああ、なるほど、文字列引数を取ってないputStrだから出てきたのね>構成する関数
#
>>=ha
#
>>=は無理やり適用、か。
2010/01/25 08:55:57 UTCnobsun
#
単なるβじゃないので。
2010/01/25 08:59:00 UTCcut-sea
#
いわゆるアクションってのは「~しようとするもの」ですね。
2010/01/25 08:59:11 UTCnobsun
#
そう。
2010/01/25 08:59:13 UTCcut-sea
#
「すること」ではない
2010/01/25 08:59:33 UTCnobsun
#
未然形
#
(1+)とかと同じ感覚
2010/01/25 09:01:45 UTCcut-sea
#
あーなんとなく分かる気がする>(1+)
2010/01/25 09:03:10 UTCnobsun
#
subtract 3 とか
#
2010/01/25 09:05:07 UTCcut-sea
#
(1+)って「1をたそうとすること」?
#
plus = (1+)
#
plusは1をたそうとすることである
#
#
でいいのかな?
2010/01/25 09:05:54 UTCnobsun
#
plus は 1 を足そうとするものである。
2010/01/25 09:06:26 UTCcut-sea
#
アクションと同じになた「~しようとするもの」
2010/01/25 09:06:55 UTCnobsun
#
区別する必要がない
#
したいのであれば
2010/01/25 09:07:29 UTCcut-sea
#
ってことはIOがついていることは「標準入力から」とか「標準出力に」とかの部分にだけ影響してる?
2010/01/25 09:08:03 UTCnobsun
#
そう。
#
いやちがう。
#
〜をもらったら、それに..をしようとするもの
#
これは普通の関数。
#
IOは 〜をもらったらがない。
#
もらったら というのは命令的するぎるなぁ。
2010/01/25 09:10:49 UTCcut-sea
#
うむ
2010/01/25 09:11:51 UTCnobsun
#
plus は引数から引数に1を加えたものへの関数である。
2010/01/25 09:14:12 UTCcut-sea
#
最初の定義がまずったな s/plus/inc/gとさせてください>本質的じゃないけど
2010/01/25 09:14:33 UTCnobsun
#
succとか?
2010/01/25 09:14:52 UTCcut-sea
#
ああ、succの方がそれっぽい
#
関数ってことばが出てくると、IOとの違いがそこにフォーカスされちゃうなー
2010/01/25 09:22:56 UTCcut-sea
#
succ :: Int -> Intとすると->を「関数」と読んじゃったので、それなら main :: IO () は IO を「アクション」と読んじゃうというのでもOKそう
#
せっかくIOを「~しようとするもの」とまで言えたのであれば->も噛み砕ければ関係がよりはっきりしないだろうかというクレクレ
2010/01/25 09:32:22 UTCcut-sea
#
とりあえず帰ります
#
thanx > nobsun
2010/01/25 10:11:11 UTCnakanowatari
#
HIMA#4 の Archive wo
#
Archive を Wave 上で見ていて、操作を間違えてしまいました。すいません。元通りにしようとして、さらにひどくなり、すいません。もう少し、なんとかならないか見てみます。
2010/01/25 11:38:15 UTCnakanowatari
#
HIMA#4 のWave上の回復を試みましたが、すべての発言に私のIDが重なってしまいました。申し訳ありません。
2010/01/25 16:39:46 UTCsakai
#
そんな罠が。Google Wave はまだ結構落とし穴がある感じですね。
#
ところで、次回のHIMAはどうしましょう。
#
shelarcyさんとか幹事やりません?