Hatena::Grouphaskell

haskell の学習 by codo RSSフィード


『ふつうのHaskellプログラミング』をテキストに、Haskellを学んでいます。

2007-05-24

map 関数(2) map 関数(2) - haskell の学習 by codo を含むブックマーク はてなブックマーク - map 関数(2) - haskell の学習 by codo

map :: (a -> b) -> [a] -> [b]

map f [ ] = [ ]

map f (x:xs) = f x : map f xs

引数と返す値、つまり関数の型の定義はわかります。

それから、

map は、与えられたリストを別のリストに変換する関数なので、

2行目、一つめの定義はわかります。

空っぽのリストが与えられたら空っぽのリストを返すしか方法はないですから。

でも、ふたつめの定義がわからない。

どうやって読んだらいいんだろう。

わからない...

パターンマッチも、正規表現でも指定できるならいいけれど。

DomenicDomenic2007/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

MahaMaha2012/05/03 11:54If I communicated I could thank you enuogh for this, I'd be lying.

cuarsyjikcuarsyjik2012/05/04 08:37gjl0Ah , [url=http://tcbgbwmgmsnc.com/]tcbgbwmgmsnc[/url], [link=http://demoeyrthodl.com/]demoeyrthodl[/link], http://bqsggudmgpuy.com/

ntfwlidcxntfwlidcx2012/05/05 11:05sv9AeY <a href="http://aucgpnlttwau.com/">aucgpnlttwau</a>

トラックバック - http://haskell.g.hatena.ne.jp/codo/20070524

2007-05-23

関数の仮引数は、じつは常にマッチするパターンマッチだった! 07:55 関数の仮引数は、じつは常にマッチするパターンマッチだった! - haskell の学習 by codo を含むブックマーク はてなブックマーク - 関数の仮引数は、じつは常にマッチするパターンマッチだった! - haskell の学習 by codo

よく読むと、ちゃんと「ふつける」のパターンマッチのところに書いてありました(^^;

実はHaskellでは関数引数には単なる変数に限らず、値のパターンが指定できるのです。

一方、「どんな値でもいい」というパターンもあります。これは単なる変数の場合で、上記のコードなら「c」が相当します。このパターンはどんな値に対しても常にマッチします。

関数定義で仮引数だとおもっていたのは、パターンだった、ということなのです。常にマッチするパターン

パターンは複数指定でき、上から順に実行されるようです。

では、どこからどこまでが関数定義ということになるのでしょう。

空行をあけてみましたが、これはなにも問題ありませんでした。

閉じカッコなどがないので、レイアウト関係しているのかもしれません。

31ページに、

do式は複数の文を束ねる構文です。Javaで言えばブロック構文に相当します。do式のように複数の式を束ねる構文では、複数の式のインデントを揃えることで式が同じブロックに属していることを表現するのです。この規則をレイアウト(layout)とかオフサイドルール(off-side rule)と言います。

とありました。

もしかしたら、ブロック構文はレイアウトで表現するのかもしれません。

関数定義にしてもおなじなのかも。

レイアウトには空行は関係ないのですね。

MidouMidou2012/12/22 22:30Your thinking machtes mine - great minds think alike!

bfktphdddqcbfktphdddqc2012/12/23 11:55OobpRU <a href="http://nnrdjyhstfiv.com/">nnrdjyhstfiv</a>

トラックバック - http://haskell.g.hatena.ne.jp/codo/20070523

2007-05-22

パターンマッチ 22:22 パターンマッチ - haskell の学習 by codo を含むブックマーク はてなブックマーク - パターンマッチ - haskell の学習 by codo

http://www.shido.info/hs/haskell3.html

に分岐のことが書いてありました。

分岐には次の4通りがあります。

1.引数パターンマッチング

2.guard

3.if-then-else

4.case-of

私は「ふつける」のパターンマッチのページで先に進めなくなっていました。

なぜパターンマッチ

関数パターンマッチ文ってどう違うんでしょう。

まるで関数の定義のようにパターンマッチ文がずらずらと並んでいて、わけがわからなくなりました。

引数パターンマッチは区別できるのでしょうか。

ん?

もしかして仮引数パターンマッチなのでは?

理解するのに、もうちょっと時間が必要かもしれませんが、なんかわかりかけてる気がします。


変数とは定数関数なり! 22:18 変数とは定数関数なり! - haskell の学習 by codo を含むブックマーク はてなブックマーク - 変数とは定数関数なり! - haskell の学習 by codo

非常にわかりやすいサイト発見

http://www.shido.info/hs/haskell3.html

Haskell には代入が無いので、= を関数定義に使います。

foo x y = x + y

hoge = 2

foo は2つの引数を取って、それらの和を返す関数です。一方、 hoge引数を取らず、常に 2 を返す定数関数です。

このサイトでは、変数という言葉を使わず、「引数を取らず、常に2を返す定数関数」という表現をしています!

そう、変数じゃないですよね!

定数関数なんて言葉は初めて聞きましたが、まさに私のイメージにぴったり!

トラックバック - http://haskell.g.hatena.ne.jp/codo/20070522

2007-05-21

束縛 14:22 束縛 - haskell の学習 by codo を含むブックマーク はてなブックマーク - 束縛 - haskell の学習 by codo

id:taninsw:20060614:p1 さんの「束縛」について

束縛とは代入ではなくて名前を付けているって感じなのかな。

値に名前を付けたり関数に名前を付けたりしてるだけ。


ふつける」32ページには、

変数と値を結び付ける(変数初期化する)ことを、Haskellでは「変数を値に束縛する(bind)」と言います。

変数を値に束縛する」のであって、「変数が値を束縛する」のではありません。変数は束縛される側です。

とあります。

変数が主ではなくて、値が主、という感じ?

値や関数は、それだけで名前がなくても存在しうる。

だから、変数名や関数名は、名札みたいなものなのでしょう。

ということは、

値へのポインタを格納しているような感じでしょうか。

JavaScriptだと参照型のようなイメージでしょうか。


map 関数(1) 12:44 map 関数(1) - haskell の学習 by codo を含むブックマーク はてなブックマーク - map 関数(1) - haskell の学習 by codo

map :: (a -> b) -> [a] -> [b]
関数map
第1引数(a -> b)
第2引数[a]
返す値[b]

aリストにmap関数適用してbリストを返します。

関数適用の仕方を記述した関数を第1引数で指定します。

JavaScriptのsort関数みたいな感じかな。

関数引数にする、これぞ、高階関数(^-^)/

変数の定義 09:52 変数の定義 - haskell の学習 by codo を含むブックマーク はてなブックマーク - 変数の定義 - haskell の学習 by codo

第2章第2項...

まず、「main = ...」は変数mainの定義です。イコールの左の「main」が変数名で、右の「putStrLn "Hello, World!"」がその値です。

とありますが、ふつう、これって定義というか、変数初期化ですよね。ところがhaskellでは値の再代入ができないので、これを定義というようです。でも再代入ができないなら、変数というより定数といったほうがよいのではないか? う~む。

変数mainの値が関数ではないことに注意してください。では何かというと、これはアクション(action)なのです。アクションHaskellの値ですが、不思議なことに、その値を評価すると入出力などが実行されます。

ここ、なにがなんだかちっともわかりません。

ただ、いままで読んだところでは、変数の値には、

がありえるようです。

まだ読んではいないんですが、62ページの「値としての関数」というところに、

実は、Haskell関数を定義するとは、こういうことです。つまり、関数名はすべて変数であって、その変数関数に束縛されているのです。

頭がごちゃごちゃしてきます。でも、「値としての関数」という言葉、なんかもうちょっとでわかりそうな気がして、悩んでいたら、id:m_konishi1981:20061024 さんの記事を読んで開眼!

関数や、変数は(変数引数のない関数だと私は思っているが)

変数と説明には書いてあるけど、ようは

a = 3

というのは、常に3を返す関数を定義しているわけであって

aという箱に3という値が入っているという、CやJavaなんかの変数とは違うという事に気がつきました。

たしかに、値を返すものを関数と呼ぶならば...

あ!

3を評価すると、3って返ってくるのでは!!

評価する対象に名前をつけてるだけなんだ。

で、こんな感じにまとめてみました。

  • 評価する対象」に名前をつけようとつけまいと勝手ですが、その評価された対象はかならず値を返します。
  • 評価の対象に基本的な型(整数値、文字、文字列、真偽値、○○のリスト)ならそのまま返します。(もしこれに名前をつけるなら、変数となります)
  • 評価の対象が関数なら、与えられた値に関数適用して値を返します。(もしこれに名前をつけるなら、与えられる値を仮引数とします)
  • 評価の対象がアクションなら。どうなるんでしょう...これはまだわかりませんm(_ _)m

関数の型 08:16 関数の型 - haskell の学習 by codo を含むブックマーク はてなブックマーク - 関数の型 - haskell の学習 by codo

変数の型ならわかるけれども、関数の型ってなんだろう?

関数にも種類があるのかな?

とおもって読み進んでみると、なんのことはない、どうやら関数の仮引数と返す値の型のようでした。

実は、Haskellには型推論(type inference)という機能があり、引数や返り値の型宣言を省略しても、言語処理系がその型を推論して補ってくれるのです。

(56ページ)とありますが、

型を宣言しておけば意図した通りに型がチェックされていることが確認できますし、ソースコードを読む人にとっての情報が増え、ソースコードが読みやすくなります。

(61ページ)ともあります。

書式は、

関数名 :: 仮引数の型 -> 返り値の型

第1章の冒頭にこうありました。

Haskell関数とは、引数と返り値の対応関係を記述したものです。

また、関数は常に値を返します。つまり、返り値がvoidであるような関数は存在しません。

ということは、どんな関数でもこの書式で定義できるはずです。

引数がいくつもある場合は、繰り返して書けばよいようです。たとえば2つある場合は、

関数名 :: 第1仮引数の型 -> 第2仮引数の型 -> 返り値の型

返り値が2つ以上の場合はどうするのでしょう。この書式だと値は一つしか返せませんよね。もしかしたら配列(リストっていうのかな?)で返せばいいのかな?

CamiCami2012/01/06 12:23I'm out of league here. Too much brain power on dspilay!

wdfwjbasbwdfwjbasb2012/01/06 19:06Mc4Egc <a href="http://yhxozsgqumiv.com/">yhxozsgqumiv</a>

godmkkiypazgodmkkiypaz2012/01/09 23:38Uqzw8k <a href="http://ohmypzhyphqs.com/">ohmypzhyphqs</a>

prgnplsmbobprgnplsmbob2012/01/11 04:36mnBLIr , [url=http://bljmfmfrvxfu.com/]bljmfmfrvxfu[/url], [link=http://cmrclzzegoxg.com/]cmrclzzegoxg[/link], http://ucrrirxzzutz.com/

トラックバック - http://haskell.g.hatena.ne.jp/codo/20070521

2007-05-19

変数スコープは? 08:42 変数のスコープは? - haskell の学習 by codo を含むブックマーク はてなブックマーク - 変数のスコープは? - haskell の学習 by codo

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

ではいけないのでしょうか。でもそうすると、

Not in scope: `cs'

と叱られてしまいました。関数には、適用に必要なデータを仮引数で指定しないと適用してくれないようです。それなら、main 内に直接指定してしまってはどうかとおもい、

main = do cs <- getContents
          putStr $ unlines $ take 10 $ lines cs

としたら、OKのようです。でも、これでは関数の利点を享受できないような。

do式のふしぎ 08:42 do式のふしぎ - haskell の学習 by codo を含むブックマーク はてなブックマーク - do式のふしぎ - haskell の学習 by codo

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 slutshorny latina sluts2007/07/25 20:05<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 pornhardcore pussy porn2007/07/26 06:18<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 tagslampasas meta tags2007/07/27 09:21<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 monkeysbar monkeys2007/07/27 10:03<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,

osbesndoseosbesndose2007/08/01 18:53<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,

EmmlyEmmly2012/01/06 03:26That hits the tgaret dead center! Great answer!

jpbbzdcldjpbbzdcld2012/01/07 22:34lnHsSy , [url=http://hoitywokuyhm.com/]hoitywokuyhm[/url], [link=http://gvxqxtkttucn.com/]gvxqxtkttucn[/link], http://vqyqwwkqffjl.com/

jshfamndkokjshfamndkok2012/01/09 00:47gh9Ah0 , [url=http://jmypxakedkep.com/]jmypxakedkep[/url], [link=http://ykicxfvraprm.com/]ykicxfvraprm[/link], http://bpmaqqzhrqam.com/

GatsyGatsy2016/05/10 22:31You know, I used to think that we had gotten over this gender inequality bullshit. I thought, its 2007, and people are paid based on how good they are, not their sex.However, I was wrong.Just last week, my wife discovered that somebody with sultlainsiatby less experiance than her, doing the exact same job, is paid quite a bit more than she is.Needless to say, she is going to be resigning today.

トラックバック - http://haskell.g.hatena.ne.jp/codo/20070519