Difference between revisions of "Haskell入門 5ステップ"

From HaskellWiki
Jump to navigation Jump to search
Line 20: Line 20:
 
|}
 
|}
   
WindowsではGHCとHugsの両方が動作しますが、HugsのほうがよりWindowsとの親和性が高いと思われます。しかし、GHCが最も活発に開発やメンテナンスが行われているので、たいていの人は
+
WindowsではGHCとHugsの両方が動作しますが、HugsのほうがよりWindowsとの親和性が高いと思われます。しかし、GHCが最も活発に開発やメンテナンスが行われているので、たいていの人は入門者はもちろん、プログラミングになれた人にもGHCを勧めます。またここにも[[Mac OS X|Mac OS XにHaskellをインストールする]]方法が載っています。
While both GHC and Hugs work on Windows, Hugs has perhaps the best
 
integration on that platform. Nonetheless, GHC is more actively developed and maintained, and the consensus seems to be that it is the generally-recommended environment of choice for newcomers to Haskell as well as old hands. There is also information available on
 
[[Mac OS X|installing Haskell software on Mac OS X]].
 
   
== Start Haskell ==
+
== Haskell事始め ==
   
  +
ターミナルを開いてください。もしGHCをインストール済みであれば、コマンドプロンプトに"ghci"と入力してください。(GHCインタプリタの実行ファイル名です)Hugsをインストール済みであれば"hugs"と入力してください。
Open a terminal. If you installed GHC, type '''ghci''' (the name of the executable of the GHC
 
interpreter) at the command prompt. If you installed Hugs, type '''hugs'''.
 
   
 
<pre>
 
<pre>
Line 42: Line 38:
 
</pre>
 
</pre>
   
  +
そしてプロンプトが表示されます。これでHaskellが起動し入力待ちの状態となりました。
And you are presented with a prompt. The Haskell system now attentively
 
awaits your input.
 
   
  +
== 初めてのHaskellプログラムを書いてみよう ==
== Write your first Haskell program ==
 
   
  +
他のプログラミング言語を学ぶ場合、まず最初に "Hello, world!" を書いたことと思います。なのでまずはそれをやってみましょう。
If you've learned to program another language, your first program
 
probably was "Hello, world!", so let's do that:
 
   
 
<haskell>
 
<haskell>
Line 55: Line 49:
 
</haskell>
 
</haskell>
   
  +
Haskellは文字列を評価して、結果を表示しました。
The Haskell system evaluated the string, and printed the result.
 
  +
今度は別の方法で標準出力に直接表示させてみましょう。
Or we can try a variation to print directly to standard output:
 
   
 
<haskell>
 
<haskell>
Line 63: Line 57:
 
</haskell>
 
</haskell>
   
  +
[http://haskell.org/ghc GHC]のようなHaskellコンパイラを使って、コードをコンパイルしてスタンドアロンで動作する実行ファイルを作ることもできます。 次のようなコードを書いて、'''hello.hs''' として保存します。
Using a Haskell compiler, such as [http://haskell.org/ghc GHC], you can
 
compile the code to a standalone executable. Create a source file
 
'''hello.hs''' containing:
 
   
 
<haskell>
 
<haskell>
Line 71: Line 63:
 
</haskell>
 
</haskell>
   
  +
そして次のようにしてコンパイルします。
And compile it with:
 
   
 
<pre>
 
<pre>
Line 77: Line 69:
 
</pre>
 
</pre>
   
  +
そして実行ファイルを走らせてみてください。(Unixでは'''./hello'''、Windowsでは'''hello.exe'''を実行してください)
You can then run the executable ('''./hello''' on Unix systems, '''hello.exe''' on Windows):
 
   
 
<pre>
 
<pre>
Line 84: Line 76:
 
</pre>
 
</pre>
   
== Haskell the calculator ==
+
== 電卓としてのHaskell ==
   
  +
楽しいことをしてみましょう。Haskellでの真に最初のプログラムは階数を計算する関数です。再びインタプリタに戻って関数を定義してみましょう。
Let's do something fun. In Haskell, your first true program is the
 
factorial function. So back to the interpreter now and let's define it:
 
   
 
<haskell>
 
<haskell>
Line 93: Line 84:
 
</haskell>
 
</haskell>
   
  +
これで整数の階数を計算する新しい関数 '''fac''' を定義しています。
This defines a new function called '''fac''' which computes the
 
factorial of an integer.
 
   
  +
'''fac''' にいくつか引数を与えて実行することができます。
We can now run '''fac''' on some argument:
 
 
<haskell>
 
<haskell>
 
Prelude> fac 42
 
Prelude> fac 42
Line 102: Line 92:
 
</haskell>
 
</haskell>
   
  +
'''おめでとうございます!''' プログラミングによって一つ便利になりました。Hugsを使っている場合は、以下のようなコードを保存したファイル '''fac.hs''' から '''fac''' の定義を読み込む必要があるので気をつけてください。
'''Congratulations!''' Programming made easy. Note that if you're using
 
Hugs, you'll need to load the definition of '''fac''' from a file,
 
'''fac.hs''', containing:
 
   
 
<haskell>
 
<haskell>
Line 110: Line 98:
 
</haskell>
 
</haskell>
   
  +
そしてHugsでは次のように実行します。(GHCでも同様にして動きます)
And run it with Hugs as follows (this also works in GHCi):
 
   
 
<haskell>
 
<haskell>
Line 118: Line 106:
 
</haskell>
 
</haskell>
   
  +
もちろんこのプログラムをコンパイルしてスタンドアロンな実行ファイルを生成することもできます。'''fac.hs''' を次のように書いてみましょう。(今度はちょっとおもしろそうなので美しいパターンマッチングを使ってみましょう)
We can of course compile this program, to produce a standalone
 
executable. In the file '''fac.hs''' we can write (and let's use
 
elegant pattern matching syntax just for fun):
 
   
 
<haskell>
 
<haskell>
Line 129: Line 115:
 
</haskell>
 
</haskell>
   
  +
そしてコンパイルして実行します。
which can then be compiled and run:
 
   
 
<pre>
 
<pre>
Line 137: Line 123:
 
</pre>
 
</pre>
   
'''Great!'''
+
'''すごい!'''
   
  +
===初めてのHaskell並列プログラミング===
===Write your first parallel Haskell program===
 
   
  +
Haskellでは並列化/マルチコアプログラミングをサポートしています。式に `par` と付け加えることで、このように並列プログラムを書くことができます。
Haskell has good support for parallel and multicore programming. We can write a parallel program by adding `par` to expressions, like so:
 
   
 
<haskell>
 
<haskell>
Line 164: Line 150:
 
</haskell>
 
</haskell>
   
  +
コンパイル時に -threaded と最適化オプションをつけます。
Compiling with -threaded and optimizations on:
 
   
 
<pre>
 
<pre>
Line 172: Line 158:
 
</pre>
 
</pre>
   
  +
これでマルチコアプログラムを動かすことができます。2コアの場合の例です。
And now we can run our multicore program. Here across two cores:
 
   
 
<pre>
 
<pre>
Line 180: Line 166:
 
</pre>
 
</pre>
   
  +
おめでとうございます!これでマルチコアでのプログラミングもできてしまいましたね!
Congratulations! You are now programming your multicore!
 
   
  +
== 次にすることは? ==
== Where to go from here ==
 
   
  +
たくさんのHaskellのチュートリアルや書籍があります。ここにいくつかおすすめを書いておきます。
There are many good Haskell tutorials and books. Here are some we recommend:
 
   
'''Tutorials'''
+
'''チュートリアル'''
 
* [[Learn_Haskell_in_10_minutes|Haskell in 10 minutes]]
 
* [[Learn_Haskell_in_10_minutes|Haskell in 10 minutes]]
 
* [http://darcs.haskell.org/yaht/yaht.pdf Yet Another Haskell Tutorial] (English)
 
* [http://darcs.haskell.org/yaht/yaht.pdf Yet Another Haskell Tutorial] (English)
Line 196: Line 182:
 
* [[Books and tutorials]]
 
* [[Books and tutorials]]
   
  +
'''コミュニティに参加しましょう!'''
'''Join the community!'''
 
   
  +
いろんな人にHaskellコミュニティを紹介してください:
Talk to others in the Haskell community:
 
   
 
* [http://haskell.org/mailman/listinfo/haskell-cafe Haskell-Cafe mailing list]
 
* [http://haskell.org/mailman/listinfo/haskell-cafe Haskell-Cafe mailing list]

Revision as of 16:28, 3 December 2009

Haskellは汎用の純粋関数型プログラミング言語です。このページではなるべく早くHaskellが使えるようになるよう手助けとなる解説をします。

Haskellのインストール

他の多くのプログラミング言語と同様に、Haskellは2種類の方法で使うことができます。 一つバイナリ(コンパイラ)でもう一つはインタラクティブシェル(インタプリタ)です。 インタラクティブシェルでは式を試したり評価したりすることができます。 まずはインタラクティブシェルで始めるのがよいでしょう。

GHC コンパイラとインタプリタ (GHCi) おそらく最も多くの機能が実装されたシステム
Hugs インタプリタのみ GHCより軽量でとてもお手軽

WindowsではGHCとHugsの両方が動作しますが、HugsのほうがよりWindowsとの親和性が高いと思われます。しかし、GHCが最も活発に開発やメンテナンスが行われているので、たいていの人は入門者はもちろん、プログラミングになれた人にもGHCを勧めます。またここにもMac OS XにHaskellをインストールする方法が載っています。

Haskell事始め

ターミナルを開いてください。もしGHCをインストール済みであれば、コマンドプロンプトに"ghci"と入力してください。(GHCインタプリタの実行ファイル名です)Hugsをインストール済みであれば"hugs"と入力してください。

    $ ghci
       ___         ___ _
      / _ \ /\  /\/ __(_)
     / /_\// /_/ / /  | |      GHC Interactive, version 6.4, for Haskell 98.
    / /_\\/ __  / /___| |      http://www.haskell.org/ghc/
    \____/\/ /_/\____/|_|      Type :? for help.

    Loading package base-1.0 ... linking ... done.
    Prelude>

そしてプロンプトが表示されます。これでHaskellが起動し入力待ちの状態となりました。

初めてのHaskellプログラムを書いてみよう

他のプログラミング言語を学ぶ場合、まず最初に "Hello, world!" を書いたことと思います。なのでまずはそれをやってみましょう。

Prelude> "Hello, World!"
"Hello, World!"

Haskellは文字列を評価して、結果を表示しました。 今度は別の方法で標準出力に直接表示させてみましょう。

Prelude> putStrLn "Hello World"
Hello World

GHCのようなHaskellコンパイラを使って、コードをコンパイルしてスタンドアロンで動作する実行ファイルを作ることもできます。 次のようなコードを書いて、hello.hs として保存します。

main = putStrLn "Hello, World!"

そして次のようにしてコンパイルします。

    $ ghc -o hello hello.hs

そして実行ファイルを走らせてみてください。(Unixでは./hello、Windowsではhello.exeを実行してください)

    $ ./hello
    Hello, World!

電卓としてのHaskell

楽しいことをしてみましょう。Haskellでの真に最初のプログラムは階数を計算する関数です。再びインタプリタに戻って関数を定義してみましょう。

Prelude> let fac n = if n == 0 then 1 else n * fac (n-1)

これで整数の階数を計算する新しい関数 fac を定義しています。

fac にいくつか引数を与えて実行することができます。

Prelude> fac 42
1405006117752879898543142606244511569936384000000000

おめでとうございます! プログラミングによって一つ便利になりました。Hugsを使っている場合は、以下のようなコードを保存したファイル fac.hs から fac の定義を読み込む必要があるので気をつけてください。

fac n = if n == 0 then 1 else n * fac (n-1)

そしてHugsでは次のように実行します。(GHCでも同様にして動きます)

Hugs.Base> :load fac.hs
Main> fac 42
1405006117752879898543142606244511569936384000000000

もちろんこのプログラムをコンパイルしてスタンドアロンな実行ファイルを生成することもできます。fac.hs を次のように書いてみましょう。(今度はちょっとおもしろそうなので美しいパターンマッチングを使ってみましょう)

fac 0 = 1
fac n = n * fac (n-1)

main = print (fac 42)

そしてコンパイルして実行します。

    $ ghc -o fac fac.hs
    $ ./fac
    1405006117752879898543142606244511569936384000000000

すごい!

初めてのHaskell並列プログラミング

Haskellでは並列化/マルチコアプログラミングをサポートしています。式に `par` と付け加えることで、このように並列プログラムを書くことができます。

import Control.Parallel

main = a `par` b `par` c `pseq` print (a + b + c)
    where
        a = ack 3 10
        b = fac 42
        c = fib 34

fac 0 = 1
fac n = n * fac (n-1)

ack 0 n = n+1
ack m 0 = ack (m-1) 1
ack m n = ack (m-1) (ack m (n-1))

fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

コンパイル時に -threaded と最適化オプションをつけます。

$ ghc -O2 --make A.hs -threaded
[1 of 1] Compiling Main             ( A.hs, A.o )
Linking A ...

これでマルチコアプログラムを動かすことができます。2コアの場合の例です。

$ time ./A +RTS -N2
1405006117752879898543142606244511569936384005711076
./A +RTS -N2  2.14s user 0.02s system 149% cpu 1.449 total

おめでとうございます!これでマルチコアでのプログラミングもできてしまいましたね!

次にすることは?

たくさんのHaskellのチュートリアルや書籍があります。ここにいくつかおすすめを書いておきます。

チュートリアル

For a complete list of textbooks, references and tutorials:

コミュニティに参加しましょう!

いろんな人にHaskellコミュニティを紹介してください:

Languages: en