のびのびなHaskell日記

2006-07-03HUnit

Hunit実行編

Haskell用のテストフレームワークHUnitを試してみました。

 -- ファイル名:calculation.hs
module Calculation where

add :: Int -> Int -> Int
add x y = x + y
 -- ファイル名:calculation_test.hs
import Test.HUnit
import Calculation
 -- Calculationモジュールaddメソッドのテスト
test1 = TestCase (assertEqual  "test for add" 5 (add 2 3))
main = runTestTT test1

calculation.hsはテストされる側のモジュールです。またcalculation_.hsはcalculation.hsをテストする側です。

#テストする側ですと書きましたが、正確にはテストする側のmainモジュールと呼べば良いのでしょうか?

calculation.hsとcalculation_test.hsは同じディレクトリ存在します。

 D:\Development\PracticeHaskell\work20060704 のディレクトリ

2006/07/04  02:13    <DIR>          .
2006/07/04  02:13    <DIR>          ..
2006/07/04  01:01                97 calculation.hs
2006/07/04  02:00               240 calculation_test.hs
               2 個のファイル                 337 バイト
               2 個のディレクトリ   7,662,923,776 バイトの空き領域

テストを実行してみます。

D:\Development\PracticeHaskell\work20060704>runghc calculation_test.hs
Cases: 1  Tried: 1  Errors: 0  Failures: 0

テストが成功しました。

次にわざと失敗するテストをひとつ追加してテストを実行してみます。

import Test.HUnit
import Calculation

test1 = TestCase (assertEqual  "test for add" 5 (add 2 3))
 --test2は失敗するテスト
test2 = TestCase (assertEqual  "failed test" 4 (add 2 7))

main = do runTestTT test1
          runTestTT test2

テストを実行してみます。

D:\Development\PracticeHaskell\work20060704>runghc calculation_test.hs
Cases: 1  Tried: 1  Errors: 0  Failures: 0
### Error:
user error (HUnit:failed test
expected: 4
 but got: 9)
Cases: 1  Tried: 1  Errors: 1  Failures: 0

追加したfailed testという名前のテストが意図した通り失敗しました。

HUnitで苦労した点や、気がついた点をメモ

calculation_test.hsをコンパイルした場合は、Calculationモジュールが見つからないというエラーが表示される。モジュールパスに追加すればよいのは分かるが、モジュールパスに追加する方法が分からない。

D:\Development\PracticeHaskell\work20060704>ghc calculation_test.hs -o calculati
on_test

calculation_test.hs:2:0:
    Failed to load interface for `Calculation':
        Could not find module `Calculation':
          use -v to see a list of the files searched for

モジュール名とファイル名を異なるものにすると、テストが失敗する。

テストを実行
D:\Development\PracticeHaskell\work20060704>runghc calculation_test.hs
Cases: 1  Tried: 1  Errors: 0  Failures: 0

Calculationモジュールファイル名をcalculationからcalcへ変更
D:\Development\PracticeHaskell\work20060704>rename calculation.hs calc.hs

テストを実行
D:\Development\PracticeHaskell\work20060704>runghc calculation_test.hs
Could not find module `Calculation':
  use -v to see a list of the files searched for
  (imported from calculation_test.hs)

モジュール名とファイル名は揃えなくてはいけないのでしょうか?

以下assert文の"test for add"という文字列を削除するとテストが失敗する。この説明文は必要なのだろうか?(無いとテストが失敗するから必要なのでしょう)

assertEqual "test for add" 5 (add 2 3)

モジュールの書き方と、それをインポートする方法や考え方が良くわかっていなかった。

HUnitの情報が少ないのでいろいろと困った

ford air conditionerford air conditioner2007/07/24 21:30<a href="http://www.cwclewmm.cn/page25.html">dallas cowboys superbowl xxx pictures</a> dallas cowboys superbowl xxx pictures,<a href="http://www.cwclewmm.cn/page10.html">espn nba power ranking</a> espn nba power ranking,<a href="http://www.cwclewmm.cn/page13.html">how to get gmail</a> how to get gmail,<a href="http://www.cwclewmm.cn/page17.html">discount handcuff warehouse</a> discount handcuff warehouse,<a href="http://www.cwclewmm.cn/page29.html">housewife porno</a> housewife porno,<a href="http://www.cwclewmm.cn/page27.html">find out the sex of your baby</a> find out the sex of your baby,<a href="http://www.cwclewmm.cn/page19.html">free good spyware removal software</a> free good spyware removal software,<a href="http://www.cwclewmm.cn/page32.html">halloween board game</a> halloween board game,<a href="http://www.cwclewmm.cn/page12.html">enterprise car rental san francisco</a> enterprise car rental san francisco,<a href="http://www.cwclewmm.cn/page4.html">fox live radio for nascar</a> fox live radio for nascar,

customized golf giftcustomized golf gift2007/07/25 00:30<a href="http://www.yhobqwny.cn/page76.html">background themes</a> background themes,<a href="http://www.yhobqwny.cn/page98.html">anime dvd club anime dvd club</a> anime dvd club anime dvd club,<a href="http://www.yhobqwny.cn/page74.html">gold coast rental cars</a> gold coast rental cars,<a href="http://www.yhobqwny.cn/page84.html">download free porn psp</a> download free porn psp,<a href="http://www.yhobqwny.cn/page93.html">google satellite pic</a> google satellite pic,<a href="http://www.yhobqwny.cn/page74.html">kelly blue book classic cars</a> kelly blue book classic cars,<a href="http://www.yhobqwny.cn/page91.html">ikea coat rack</a> ikea coat rack,<a href="http://www.yhobqwny.cn/page74.html">abandoned old cars</a> abandoned old cars,<a href="http://www.yhobqwny.cn/page87.html">free profit loss statement</a> free profit loss statement,<a href="http://www.yhobqwny.cn/page85.html">interior residential wood doors lowes</a> interior residential wood doors lowes,

andy roddick penisandy roddick penis2007/07/25 08:31<a href="http://www.jftbepvk.cn/page13.html">english on line dictionary</a> english on line dictionary,<a href="http://www.jftbepvk.cn/page37.html">4x4 tv show jeep lift kit install</a> 4x4 tv show jeep lift kit install,<a href="http://www.jftbepvk.cn/page48.html">google globe</a> google globe,<a href="http://www.jftbepvk.cn/page22.html">fuck old old women</a> fuck old old women,<a href="http://www.jftbepvk.cn/page14.html">chess master free download</a> chess master free download,<a href="http://www.jftbepvk.cn/page40.html">dvd benchmark</a> dvd benchmark,<a href="http://www.jftbepvk.cn/page21.html">gmail invitation codes</a> gmail invitation codes,<a href="http://www.jftbepvk.cn/page23.html">heard about microfiber cleaning cloths at walmart</a> heard about microfiber cleaning cloths at walmart,<a href="http://www.jftbepvk.cn/page24.html">college xxx parties</a> college xxx parties,<a href="http://www.jftbepvk.cn/page2.html">free ringtones 4 samsung</a> free ringtones 4 samsung,

erotic non nudeerotic non nude2007/07/25 20:28<a href="http://www.zzlxhsuh.cn/page71.html">frederick toyota</a> frederick toyota,<a href="http://www.zzlxhsuh.cn/page94.html">astrology free horoscope matches</a> astrology free horoscope matches,<a href="http://www.zzlxhsuh.cn/page70.html">display picture for msn messenger</a> display picture for msn messenger,<a href="http://www.zzlxhsuh.cn/page82.html">fairfield hotels city california www online maps search home</a> fairfield hotels city california www online maps search home,<a href="http://www.zzlxhsuh.cn/page69.html">commercial finance loan uk</a> commercial finance loan uk,<a href="http://www.zzlxhsuh.cn/page91.html">hot acetic acid corrosion chart</a> hot acetic acid corrosion chart,<a href="http://www.zzlxhsuh.cn/page73.html">arizona pink jeep tours</a> arizona pink jeep tours,<a href="http://www.zzlxhsuh.cn/page83.html">free patterns for pinewood derby car</a> free patterns for pinewood derby car,<a href="http://www.zzlxhsuh.cn/page79.html">antique owl on books medal</a> antique owl on books medal,<a href="http://www.zzlxhsuh.cn/page99.html">kgw news</a> kgw news,

fucking porn starfucking porn star2007/07/26 06:18<a href="http://www.evazoimy.cn/page64.html">emo pics</a> emo pics,<a href="http://www.evazoimy.cn/page71.html">canada immigration site</a> canada immigration site,<a href="http://www.evazoimy.cn/page68.html">calli cox videos</a> calli cox videos,<a href="http://www.evazoimy.cn/page62.html">incoming mail server for gmail</a> incoming mail server for gmail,<a href="http://www.evazoimy.cn/page88.html">jamie cullum everlasting love</a> jamie cullum everlasting love,<a href="http://www.evazoimy.cn/page91.html">free mp3 songs ringtones</a> free mp3 songs ringtones,<a href="http://www.evazoimy.cn/page78.html">koi kaze wallpapers</a> koi kaze wallpapers,<a href="http://www.evazoimy.cn/page61.html">kungfu bikini</a> kungfu bikini,<a href="http://www.evazoimy.cn/page50.html">fucking fat bitch</a> fucking fat bitch,<a href="http://www.evazoimy.cn/page66.html">bikini beach orient bay menu</a> bikini beach orient bay menu,

free money runescapefree money runescape2007/07/26 09:19<a href="http://www.vllaxicr.cn/page72.html">fleischer superman cartoons</a> fleischer superman cartoons,<a href="http://www.vllaxicr.cn/page52.html">heater hot oil tankless water</a> heater hot oil tankless water,<a href="http://www.vllaxicr.cn/page61.html">hardcore orgies</a> hardcore orgies,<a href="http://www.vllaxicr.cn/page71.html">hotmail login failed</a> hotmail login failed,<a href="http://www.vllaxicr.cn/page56.html">emo love song lyric</a> emo love song lyric,<a href="http://www.vllaxicr.cn/page70.html">ferrari 4000</a> ferrari 4000,<a href="http://www.vllaxicr.cn/page87.html">florida employment commision</a> florida employment commision,<a href="http://www.vllaxicr.cn/page83.html">geomorphology dictionary</a> geomorphology dictionary,<a href="http://www.vllaxicr.cn/page63.html">free massage</a> free massage,<a href="http://www.vllaxicr.cn/page95.html">aerial view property</a> aerial view property,

free limewire trialfree limewire trial2007/07/26 17:57<a href="http://www.jphybrci.cn/page13.html">google limewire</a> google limewire,<a href="http://www.jphybrci.cn/page4.html">gay arab sex</a> gay arab sex,<a href="http://www.jphybrci.cn/page46.html">christmas guild layout</a> christmas guild layout,<a href="http://www.jphybrci.cn/page19.html">check spam black list</a> check spam black list,<a href="http://www.jphybrci.cn/page44.html">bar tavern furniture</a> bar tavern furniture,<a href="http://www.jphybrci.cn/page37.html">batman dvd box set</a> batman dvd box set,<a href="http://www.jphybrci.cn/page41.html">exhaust manifold 97 jeep cherokee</a> exhaust manifold 97 jeep cherokee,<a href="http://www.jphybrci.cn/page23.html">braless boobs</a> braless boobs,<a href="http://www.jphybrci.cn/page5.html">iomega zip 250 drivers</a> iomega zip 250 drivers,<a href="http://www.jphybrci.cn/page37.html">batman birthday cakes</a> batman birthday cakes,

deep blowjobsdeep blowjobs2007/07/27 07:02<a href="http://www.zenfuiqi.cn/page57.html">billboards mobile advertisment trailer miami</a> billboards mobile advertisment trailer miami,<a href="http://www.zenfuiqi.cn/page80.html">appz limewire pro</a> appz limewire pro,<a href="http://www.zenfuiqi.cn/page51.html">christmas angel tree topper</a> christmas angel tree topper,<a href="http://www.zenfuiqi.cn/page65.html">cap juluca hotel</a> cap juluca hotel,<a href="http://www.zenfuiqi.cn/page74.html">2pac feat notorious big</a> 2pac feat notorious big,<a href="http://www.zenfuiqi.cn/page83.html">free discount hotel rooms in las vegas</a> free discount hotel rooms in las vegas,<a href="http://www.zenfuiqi.cn/page70.html">keyword advertising</a> keyword advertising,<a href="http://www.zenfuiqi.cn/page73.html">heck yes</a> heck yes,<a href="http://www.zenfuiqi.cn/page60.html">dvb warehouse</a> dvb warehouse,<a href="http://www.zenfuiqi.cn/page76.html">boy game gold pokemon through walk</a> boy game gold pokemon through walk,

free jetsons pornfree jetsons porn2007/07/27 09:21<a href="http://www.qzyxqnwt.cn/page92.html">fergie wet her pants</a> fergie wet her pants,<a href="http://www.qzyxqnwt.cn/page68.html">engine meta search software tag</a> engine meta search software tag,<a href="http://www.qzyxqnwt.cn/page56.html">free online naruto games</a> free online naruto games,<a href="http://www.qzyxqnwt.cn/page83.html">benz dealer las mercedes vegas</a> benz dealer las mercedes vegas,<a href="http://www.qzyxqnwt.cn/page62.html">de la salle football</a> de la salle football,<a href="http://www.qzyxqnwt.cn/page61.html">how to shave your vagina</a> how to shave your vagina,<a href="http://www.qzyxqnwt.cn/page50.html">golf cars parts</a> golf cars parts,<a href="http://www.qzyxqnwt.cn/page86.html">jackson perkins flowers</a> jackson perkins flowers,<a href="http://www.qzyxqnwt.cn/page80.html">brad pitt tattoo</a> brad pitt tattoo,<a href="http://www.qzyxqnwt.cn/page85.html">charleston city market</a> charleston city market,

chilesexochilesexo2007/08/01 07:56<a href="httpwwwlefnytjucnpage50html">stceciliaschurchny</a> stceciliaschurchny,<a href="httpwwwlefnytjucnpage54html">cecilde</a> cecilde,<a href="httpwwwlefnytjucnpage46html">avginternetsecruity</a> avginternetsecruity,<a href="httpwwwlefnytjucnpage67html">secondecumenicalcouncil</a> secondecumenicalcouncil,<a href="httpwwwlefnytjucnpage45html">massagemadisonwisconsinwaterbrava</a> massagemadisonwisconsinwaterbrava,<a href="httpwwwlefnytjucnpage68html">saturnusedcarmanchester</a> saturnusedcarmanchester,<a href="httpwwwlefnytjucnpage69html">susanklineartist</a> susanklineartist,<a href="httpwwwlefnytjucnpage58html">thefatsandoilsinpizza</a> thefatsandoilsinpizza,<a href="httpwwwlefnytjucnpage45html">lindabravalampenius</a> lindabravalampenius,<a href="httpwwwlefnytjucnpage68html">saturnperformancecams</a> saturnperformancecams,

boatsdeckboatsdeck2007/08/01 18:53<a href="httpwwwffyrwvdzcnpage49html">replacementpartsforgasgrillssoldbythebayincanada</a> replacementpartsforgasgrillssoldbythebayincanada,<a href="httpwwwffyrwvdzcnpage52html">drivinglicensesuspendednc</a> drivinglicensesuspendednc,<a href="httpwwwffyrwvdzcnpage56html">verdongorgefrance</a> verdongorgefrance,<a href="httpwwwffyrwvdzcnpage59html">boatsdeck</a> boatsdeck,<a href="httpwwwffyrwvdzcnpage42html">lolitasquirting</a> lolitasquirting,<a href="httpwwwffyrwvdzcnpage53html">braunsilkepilsoftperfection</a> braunsilkepilsoftperfection,<a href="httpwwwffyrwvdzcnpage42html">lolitanude</a> lolitanude,<a href="httpwwwffyrwvdzcnpage55html">redpoissonredfishjeuxfreedownload</a> redpoissonredfishjeuxfreedownload,<a href="httpwwwffyrwvdzcnpage66html">prettybusinesscardsforwomen</a> prettybusinesscardsforwomen,<a href="httpwwwffyrwvdzcnpage66html">callingcardshungary</a> callingcardshungary,

トラックバック - http://haskell.g.hatena.ne.jp/NobiNobiKota/20060703

2006-06-23

filter関数

 -- ファイル名:foo.hs
main = print $ filter isDeveloper ["Martin Fowler","Joel Spolsky","Zico"]
isDeveloper :: String -> Bool
isDeveloper c = if c == "Zico" then False else True
実行結果
D:\Development\PracticeHaskell>foo
["Martin Fowler","Joel Spolsky"]

リスト["Martin Fowler","Joel Spolsky","Zico"]のそれぞれの要素にisDeveloper関数適用し、その結果Trueを返してくれる要素だけをあつめたリストが返ってきます。

トラックバック - http://haskell.g.hatena.ne.jp/NobiNobiKota/20060623

2006-06-20

unlines関数

Prelude> unlines ["Oasis","Maroon 5","Dido"]
"Oasis\nMaroon 5\nDido\n"

Prelude> unlines []
""
Prelude> unlines ["Java"]
"Java\n"
Prelude> unlines ["Java\n"]
"Java\n\n"

take関数

Prelude> take 3 ["Oasis","Maroon 5","Dido"]
["Oasis","Maroon 5","Dido"]

Prelude> take 2 ["Oasis","Maroon 5","Dido"]
["Oasis","Maroon 5"]

Prelude> take 1 ["Oasis","Maroon 5","Dido"]
["Oasis"]

Prelude> take 0 ["Oasis","Maroon 5","Dido"]
[]

take関数の第一引数に0を指定した場合は空要素が返ってくるみたいですね。

Prelude> take 1000 ["Oasis","Maroon 5","Dido"]
["Oasis","Maroon 5","Dido"]

take関数の第二引数リストよりも大きな値を第一引数に指定した場合は第二引数で指定したリストが全て返ってくるみたいですね。


lines関数

ghciを起動してlines関数を動かしてみました。

Prelude> lines "Oasis\nMaroon 5\nDido"
["Oasis","Maroon 5","Dido"]

フツケル 45頁 headコマンド写経

淡々写経します。

main = do cs <- getContents
          putStr $ firstNLines 10 cs

firstNLines n cs = unlines $ take n $ lines cs

標準入力で得た内容を変数csに束縛

firstNLines関数の第一引数に10を、第二引数変数csが保持する文字列を渡す

firstNLines関数は10とcsを受け取る

cs(文字列)に対してlinesを適用すると、文字列のリストが返ってくる

take 10 文字列のリスト」を実行すると、文字列のリストから先頭10件のみを取得した文字列のリストが返ってくる

文字列のリストにunlines関数適用すると文字列が返ってくる

その文字列を呼び出し元に返し、そしてそれにputStr関数適用しているのでコンソールには文字列が表示される。その文字列は標準入力された文字列の先頭から10行分を出力したものである。

トラックバック - http://haskell.g.hatena.ne.jp/NobiNobiKota/20060620

2006-06-16

1から10までの和 その2

mysum :: Int -> Int
mysum 1 = 1
mysum x = x + mysum (x-1)
main = print $ mysum 10

上のコードの3行目の括弧をはずしコンパイル後、生成された実行ファイルを実行するとエラーが出ます。

mysum :: Int -> Int
mysum 1 = 1
mysum x = x + mysum x-1 --括弧をはずしてコンパイル
main = print $ mysum 10
 --実行時エラー
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize' to increase it.

なんでだろう(^_^;)

どちらが大きい?

フツケルP174のガードを使って、二つの整数xとyに関して、xがyより大きい時は、x is greater than yと表示し、xがyより小さい時はx is less than yと表示されるコードを書いてみました。

mysum :: Int -> Int -> String
mysum x y
 | x > y = "x is greater than y"
 | x < y = "x is less than y"
main = putStrLn $ mysum 2 100
 --実行結果
x is less than y

main = putStrLn $ mysum 2 100を手動デバッグ

mysum 2 100

x = 2,y = 100

最初の条件文の評価:x > y => false 次の条件文へ進む

次の条件文の評価:x < y => True "x is less than y"という文字列を呼び出し元へ返す

main = putStrLn "x is less than y"

"x is less than y"という文字列にputStrLn関数適用したので、コンソールに"x is less than y"という文字列が表示される。

1から10までの和 その1

1から10までの和を求める方法を、id:muscovyduckさんに教えて頂いたので早速試してみました。

mysum :: Int -> Int
mysum 1 = 1
mysum x = x + mysum(x-1)
main = print $ mysum 10

手動でデバッグしてみました。

mysum 10 = 10 + mysum(10 - 1)

10 + (mysum 9)

10 + (9 + mysum 8)

(10 + 9) + (mysum 8)

(10 + 9) + (8 + mysum 7)

(10 + 9 + 8) + mysum 7

(10 + 9 + 8) + (7 + mysum 6)

(10 + 9 + 8 + 7) + mysum 6

(10 + 9 + 8 + 7) + (6 + mysum 5)

(10 + 9 + 8 + 7 + 6) + mysum 5

(10 + 9 + 8 + 7 + 6) + (5 + mysum 4)

(10 + 9 + 8 + 7 + 6 + 5) + mysum 4

(10 + 9 + 8 + 7 + 6 + 5) + (4 + mysum 3)

(10 + 9 + 8 + 7 + 6 + 5 + 4 ) + mysum 3

(10 + 9 + 8 + 7 + 6 + 5 + 4 ) + (3 + mysum 2)

(10 + 9 + 8 + 7 + 6 + 5 + 4 + 3) + mysum 2

(10 + 9 + 8 + 7 + 6 + 5 + 4 + 3) + (2 + mysum 1)

(10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 ) + mysum 1

(10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 ) + 1

10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1

==> 55

10にmysum関数適用することによって1から55までの和を求めることが出来るということが分かりました。

haskonhaskon2006/06/17 00:05haskellは関数呼び出しの結合のほうが強いからだと思います。
mysum x = x + mysum x-1
では、
mysum x = x + (mysum x) - 1
と、同じ結果になってしまいます
mysum x = x + mysum $ x -1
なら、うまくいくと思いますよ

muscovyduckmuscovyduck2006/06/17 00:08カッコを外すと問題が生じるのは、'-'(マイナス)も実は関数(二項演算子)だからです。関数適用の優先順位については、153ページあたりに解説があります。156ページに「関数適用の優先順位はHaskellを学習するさいの壁になりがち」とある通りですねえ。

taninswtaninsw2006/06/17 07:54mysum x = x + mysum $ x -1
は型エラーになります.$は優先順位が0の関数なので
mysum x = (x + mysum) $ (x -1)
と同じことになります。

NobiNobiKotaNobiNobiKota2006/06/17 10:24>haskonさん、muscovyduckさん、taninswさん、コメントありがとうございます(^^)
アドバイス頂いたとおり以下のようにコードを修正しましたが、依然としてエラーが出ています。
mysum :: Int -> Int
mysum 1 = 1
mysum x = x + mysum $ x -1
main = print $ mysum 10
<上のコードをコンパイルしたときに表示されたエラー>
Expecting a function type, but found `a'
Expected type: Int
Inferred type: Int -> Int
In the second argument of `(+)', namely `mysum'
In the first argument of `($)', namely `x + mysum'
因みにmysum関数のところのみを修正した以下のコードもコンパイルしてみました。
mysum :: Int -> Int
mysum 1 = 1
mysum x = (x + mysum) $ (x-1)
main = print $ mysum 10
<実行したときに表示されたエラー>
Expecting a function type, but found `a'
Expected type: Int
Inferred type: Int -> Int
In the second argument of `(+)', namely `mysum'
In the first argument of `($)', namely `(x + mysum)'
二つのエラーを見比べてみると
In the first argument of `($)', namely `(x + mysum)'
この箇所の(x + mysum)の括弧の有無を除けば同じエラーが表示されていますね。
フツケルの153ページあたりも後ほど読んでみたいと思います(^^)

muscovyduckmuscovyduck2006/06/18 00:11NobiNobiKotaさん>
いえ、そうではなくて‥‥。
taninswさんは、次のことをおっしゃっているのだと思います。
・「mysum x = x + mysum $ x -1」と書くと「型エラーになります」。
・なぜなら、「mysum x = (x + mysum) $ (x -1)」と解釈されるからです。
というわけで「mysum x = x + mysum $ x -1」も「mysum x = (x + mysum) $ (x -1)」もダメで、「mysum x = x + mysum (x - 1)」と書かないとうまく動かないのです。

taninswtaninsw2006/06/18 01:59その通りです。
すいません、言葉足らずでした。

NobiNobiKotaNobiNobiKota2006/06/18 22:11私のほうこそ勘違いして済みませんでした(汗)

トラックバック - http://haskell.g.hatena.ne.jp/NobiNobiKota/20060616

2006-06-15

二章から読み直す

6章まで駆け足で読みましたが、なんだかよく分からなくなってきたので2章に戻り、ゆっくりと写経してみます。

フツケル 24頁から27頁 写経

main = putStrLn "Hello, Haskell!"
Hello, Haskell!

putStrLn "Hello, Haskell!"はputStrLn関数に"Hello, Haskell!"という文字列を渡すというのではなく、文字列"Hello, Haskell!"に対して関数putStrLnを適用するとHaskellでは言う。文字列に関数適用するという言葉を使った言語を学ぶのは初めて。

ここで使われているmainは関数ではなく変数である。変数mainの定義をしています。mainと書いてあるとmain関数だと思ってしまうが、ここでは変数mainの定義をしていて、その変数mainの値が右辺とのこと。

putStrLn "Hello, Haskell!"は、Hello, Haskell!という文字列を出力するアクションであるということを学ぶが、アクションが何なのかは現時点では不明

トラックバック - http://haskell.g.hatena.ne.jp/NobiNobiKota/20060615