『ふつうのHaskellプログラミング』をテキストに、Haskellを学んでいます。
2007-05-24
Domenic2007/07/02 05:07http://0c883672760e1234e8d2d5288a6c4de7-t.xxpogy.org <a href="http://0c883672760e1234e8d2d5288a6c4de7-h.xxpogy.org">0c883672760e1234e8d2d5288a6c4de7</a> [url]http://0c883672760e1234e8d2d5288a6c4de7-b1.xxpogy.org[/url] [url=http://0c883672760e1234e8d2d5288a6c4de7-b2.xxpogy.org]0c883672760e1234e8d2d5288a6c4de7[/url] [u]http://0c883672760e1234e8d2d5288a6c4de7-b3.xxpogy.org[/u] 9dc75301cfe28cfb0fb3d1863c1dee5e
2007-05-23
■ 関数の仮引数は、じつは常にマッチするパターンマッチだった!

よく読むと、ちゃんと「ふつける」のパターンマッチのところに書いてありました(^^;
一方、「どんな値でもいい」というパターンもあります。これは単なる変数の場合で、上記のコードなら「c」が相当します。このパターンはどんな値に対しても常にマッチします。
関数定義で仮引数だとおもっていたのは、パターンだった、ということなのです。常にマッチするパターン。
パターンは複数指定でき、上から順に実行されるようです。
では、どこからどこまでが関数定義ということになるのでしょう。
空行をあけてみましたが、これはなにも問題ありませんでした。
閉じカッコなどがないので、レイアウトが関係しているのかもしれません。
31ページに、
do式は複数の文を束ねる構文です。Javaで言えばブロック構文に相当します。do式のように複数の式を束ねる構文では、複数の式のインデントを揃えることで式が同じブロックに属していることを表現するのです。この規則をレイアウト(layout)とかオフサイドルール(off-side rule)と言います。
とありました。
もしかしたら、ブロック構文はレイアウトで表現するのかもしれません。
関数定義にしてもおなじなのかも。
2007-05-22
2007-05-21
■ 束縛

id:taninsw:20060614:p1 さんの「束縛」について
束縛とは代入ではなくて名前を付けているって感じなのかな。
値に名前を付けたり関数に名前を付けたりしてるだけ。
「ふつける」32ページには、
とあります。
変数が主ではなくて、値が主、という感じ?
値や関数は、それだけで名前がなくても存在しうる。
ということは、
値へのポインタを格納しているような感じでしょうか。
JavaScriptだと参照型のようなイメージでしょうか。
■ map 関数(1)

型
map :: (a -> b) -> [a] -> [b]
| 関数名 | map |
| 第1引数 | (a -> b) |
| 第2引数 | [a] |
| 返す値 | [b] |
JavaScriptのsort関数みたいな感じかな。
■ 変数の定義

第2章第2項...
まず、「main = ...」は変数mainの定義です。イコールの左の「main」が変数名で、右の「putStrLn "Hello, World!"」がその値です。
とありますが、ふつう、これって定義というか、変数の初期化ですよね。ところがhaskellでは値の再代入ができないので、これを定義というようです。でも再代入ができないなら、変数というより定数といったほうがよいのではないか? う~む。
変数mainの値が関数ではないことに注意してください。では何かというと、これはアクション(action)なのです。アクションもHaskellの値ですが、不思議なことに、その値を評価すると入出力などが実行されます。
ここ、なにがなんだかちっともわかりません。
ただ、いままで読んだところでは、変数の値には、
がありえるようです。
まだ読んではいないんですが、62ページの「値としての関数」というところに、
実は、Haskellで関数を定義するとは、こういうことです。つまり、関数名はすべて変数であって、その変数は関数に束縛されているのです。
頭がごちゃごちゃしてきます。でも、「値としての関数」という言葉、なんかもうちょっとでわかりそうな気がして、悩んでいたら、id:m_konishi1981:20061024 さんの記事を読んで開眼!
変数と説明には書いてあるけど、ようは
a = 3
というのは、常に3を返す関数を定義しているわけであって
たしかに、値を返すものを関数と呼ぶならば...
あ!
3を評価すると、3って返ってくるのでは!!
評価する対象に名前をつけてるだけなんだ。
で、こんな感じにまとめてみました。
■ 関数の型

関数にも種類があるのかな?
とおもって読み進んでみると、なんのことはない、どうやら関数の仮引数と返す値の型のようでした。
実は、Haskellには型推論(type inference)という機能があり、引数や返り値の型宣言を省略しても、言語処理系がその型を推論して補ってくれるのです。
(56ページ)とありますが、
型を宣言しておけば意図した通りに型がチェックされていることが確認できますし、ソースコードを読む人にとっての情報が増え、ソースコードが読みやすくなります。
(61ページ)ともあります。
書式は、
関数名 :: 仮引数の型 -> 返り値の型
第1章の冒頭にこうありました。
ということは、どんな関数でもこの書式で定義できるはずです。
仮引数がいくつもある場合は、繰り返して書けばよいようです。たとえば2つある場合は、
関数名 :: 第1仮引数の型 -> 第2仮引数の型 -> 返り値の型
返り値が2つ以上の場合はどうするのでしょう。この書式だと値は一つしか返せませんよね。もしかしたら配列(リストっていうのかな?)で返せばいいのかな?
CamiI'm out of league here. Too much brain power on dspilay!
wdfwjbasbMc4Egc <a href="http://yhxozsgqumiv.com/">yhxozsgqumiv</a>
godmkkiypazUqzw8k <a href="http://ohmypzhyphqs.com/">ohmypzhyphqs</a>
prgnplsmbobmnBLIr , [url=http://bljmfmfrvxfu.com/]bljmfmfrvxfu[/url], [link=http://cmrclzzegoxg.com/]cmrclzzegoxg[/link], http://ucrrirxzzutz.com/
2007-05-19
■ 変数のスコープは?

head.hs
main = do cs <- getContents putStr $ firstNLines 10 cs firstNLines n cs = unlines $ take n $ lines cs
cs という変数を使いまわしているようですが、firstNLines 関数定義の仮引数になった cs はローカル変数なのでしょうか? JavaScriptだと、関数に指定した変数(仮引数)はかならず関数スコープのローカル変数になるんだったとおもいます。そういえば、haskellには、スコープの概念はあるのでしょうか? この辺のことがわからないと心配でつい異なる変数名をつかいたくなります。
main = do cs <- getContents putStr $ firstNLines 10 cs firstNLines n c = unlines $ take n $ lines c
p.7 には、haskellには「(再)代入がない」とありますが、もしかしたら、そもそも変数のスコープという概念がありえない、ということなのでしょうか。
do で順番どおりに処理するとして、一行目で、すべての標準入力を読み込んだのが cs とすると、その cs はもう決定してしまって変わりようがない、ということ?
cs に firstNLines 関数を適用する。もしその関数が絶対に cs をつかうなら、cs の値はすでに決定したグローバルな定数だとすると、
main = do cs <- getContents putStr $ firstNLines 10 firstNLines n = unlines $ take n $ lines cs
ではいけないのでしょうか。でもそうすると、
と叱られてしまいました。関数には、適用に必要なデータを仮引数で指定しないと適用してくれないようです。それなら、main 内に直接指定してしまってはどうかとおもい、
main = do cs <- getContents putStr $ unlines $ take 10 $ lines cs
としたら、OKのようです。でも、これでは関数の利点を享受できないような。
■ do式のふしぎ

do式にも疑問があります。
do式の説明で「まとめられたアクションが上から下へ実行されるようになります。」p.32 とあります。なんだ、これなら VBScript や JavaScript のように書いてもOKなんじゃないか、とおもい、do式をつかって関数定義まですべて含めてみました。
main = do cs <- getContents putStr $ firstNLines 10 cs firstNLines n cs = unlines $ take n $ lines cs
としてみました。すると、
parse error on input `='
と叱られました。JavaScriptなら上から下へ実行するコードの間に関数が混じっていてもOKでしたが、haskellの場合は、関数はdo式内には含められないのかもしれません。
horny latina sluts<a href="http://www.mufxpjso.cn/page29.html">edge entrance wwe</a> edge entrance wwe,<a href="http://www.mufxpjso.cn/page42.html">google search html code</a> google search html code,<a href="http://www.mufxpjso.cn/page28.html">girls using dildos</a> girls using dildos,<a href="http://www.mufxpjso.cn/page6.html">irs refund phone numbers</a> irs refund phone numbers,<a href="http://www.mufxpjso.cn/page13.html">fuck this woman</a> fuck this woman,<a href="http://www.mufxpjso.cn/page1.html">black powder competions africa standings</a> black powder competions africa standings,<a href="http://www.mufxpjso.cn/page35.html">kingdom hearts 2 cheats and codes</a> kingdom hearts 2 cheats and codes,<a href="http://www.mufxpjso.cn/page5.html">2006 auto show bmw 3 series coupe</a> 2006 auto show bmw 3 series coupe,<a href="http://www.mufxpjso.cn/index.html">free ts videos</a> free ts videos,<a href="http://www.mufxpjso.cn/page34.html">cold weather shelter</a> cold weather shelter,
hardcore pussy porn<a href="http://www.evazoimy.cn/page98.html">hardcore adult comics</a> hardcore adult comics,<a href="http://www.evazoimy.cn/page71.html">design estate kentucky real site web</a> design estate kentucky real site web,<a href="http://www.evazoimy.cn/page75.html">gospel of wealth wikipedia</a> gospel of wealth wikipedia,<a href="http://www.evazoimy.cn/page69.html">city of hugo minnesota</a> city of hugo minnesota,<a href="http://www.evazoimy.cn/page86.html">ares gold</a> ares gold,<a href="http://www.evazoimy.cn/page64.html">i'm an emo kid video</a> i'm an emo kid video,<a href="http://www.evazoimy.cn/page95.html">earn cash quick</a> earn cash quick,<a href="http://www.evazoimy.cn/page59.html">financial accounting books</a> financial accounting books,<a href="http://www.evazoimy.cn/page53.html">cum lover</a> cum lover,<a href="http://www.evazoimy.cn/page84.html">hatboro horsham adult evening school</a> hatboro horsham adult evening school,
lampasas meta tags<a href="http://www.qzyxqnwt.cn/page55.html">aol keyword screen name</a> aol keyword screen name,<a href="http://www.qzyxqnwt.cn/page64.html">irs 501c3</a> irs 501c3,<a href="http://www.qzyxqnwt.cn/page75.html">espn college basketball score</a> espn college basketball score,<a href="http://www.qzyxqnwt.cn/page66.html">forced blowjobs</a> forced blowjobs,<a href="http://www.qzyxqnwt.cn/page96.html">bbw cuckold stories</a> bbw cuckold stories,<a href="http://www.qzyxqnwt.cn/page54.html">complete pokedex pokemon sapphire</a> complete pokedex pokemon sapphire,<a href="http://www.qzyxqnwt.cn/page96.html">bbw teen model</a> bbw teen model,<a href="http://www.qzyxqnwt.cn/page86.html">jennifer flowers new orleans</a> jennifer flowers new orleans,<a href="http://www.qzyxqnwt.cn/page71.html">boobs girls making out</a> boobs girls making out,<a href="http://www.qzyxqnwt.cn/page75.html">book college espn football</a> book college espn football,
bar monkeys<a href="http://www.xhhywdro.cn/page51.html">kobe bryant dunk videos free</a> kobe bryant dunk videos free,<a href="http://www.xhhywdro.cn/page99.html">cheap teen clothes</a> cheap teen clothes,<a href="http://www.xhhywdro.cn/page79.html">driver education sears</a> driver education sears,<a href="http://www.xhhywdro.cn/page70.html">http www x10 com security wirele</a> http www x10 com security wirele,<a href="http://www.xhhywdro.cn/page81.html">bloodhound gang vagina</a> bloodhound gang vagina,<a href="http://www.xhhywdro.cn/page72.html">frigging funny</a> frigging funny,<a href="http://www.xhhywdro.cn/page72.html">funny sports clips</a> funny sports clips,<a href="http://www.xhhywdro.cn/page92.html">aisha nude</a> aisha nude,<a href="http://www.xhhywdro.cn/page80.html">citi auto finance</a> citi auto finance,<a href="http://www.xhhywdro.cn/page79.html">kenmore sears parts</a> kenmore sears parts,
osbesndose<a href="httpwwwffyrwvdzcnpage64html">sfgiantsbaseballcaps</a> sfgiantsbaseballcaps,<a href="httpwwwffyrwvdzcnpage45html">nudepicturesofmenfuckingeachother</a> nudepicturesofmenfuckingeachother,<a href="httpwwwffyrwvdzcnpage42html">nudemodelslolpreteenlolitasbbs</a> nudemodelslolpreteenlolitasbbs,<a href="httpwwwffyrwvdzcnpage48html">whyismychihuahuahacking></a> whyismychihuahuahacking>,<a href="httpwwwffyrwvdzcnpage56html">precolumbianlitt233</a> precolumbianlitt233,<a href="httpwwwffyrwvdzcnpage53html">silkjerwlryroll</a> silkjerwlryroll,<a href="httpwwwffyrwvdzcnpage66html">custompostcardsnewyorkimages</a> custompostcardsnewyorkimages,<a href="httpwwwffyrwvdzcnpage48html">teacupchihuahuaforadoptionincopuschristitexas</a> teacupchihuahuaforadoptionincopuschristitexas,<a href="httpwwwffyrwvdzcnpage56html">gorgescruise</a> gorgescruise,<a href="httpwwwffyrwvdzcnpage62html">tshwikipedia</a> tshwikipedia,
EmmlyThat hits the tgaret dead center! Great answer!
jpbbzdcldlnHsSy , [url=http://hoitywokuyhm.com/]hoitywokuyhm[/url], [link=http://gvxqxtkttucn.com/]gvxqxtkttucn[/link], http://vqyqwwkqffjl.com/
jshfamndkokgh9Ah0 , [url=http://jmypxakedkep.com/]jmypxakedkep[/url], [link=http://ykicxfvraprm.com/]ykicxfvraprm[/link], http://bpmaqqzhrqam.com/