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

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