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

From HaskellWiki
Jump to: navigation, search
 
(Add communities of haskell.org and haskell.jp)
 
(5 intermediate revisions by one other user not shown)
Line 1: Line 1:
Haskell is a general purpose, purely functional programming language.
 
  +
Haskellは汎用の純粋関数型プログラミング言語です。このページではなるべく早くHaskellが使えるようになるよう手助けとなる解説をします。
This page will help you get started as quickly as possible.
 
   
 
__TOC__
 
__TOC__
   
== Install Haskell ==
+
== Haskellのインストール ==
   
Haskell, like most other languages, comes in two flavors: batch oriented
 
  +
他の多くのプログラミング言語と同様に、Haskellは2種類の方法で使うことができます。
(''compiler'') and interactive (''interpreter''). An interactive system
 
  +
一つバイナリ(コンパイラ)でもう一つはインタラクティブシェル(インタプリタ)です。
gives you a command line where you can experiment and evaluate
 
  +
インタラクティブシェルでは式を試したり評価したりすることができます。
expressions directly, and is probably a good choice to start with.
 
  +
まずはインタラクティブシェルで始めるのがよいでしょう。
   
 
{| class="wikitable"
 
{| class="wikitable"
 
|[http://www.haskell.org/ghc/ GHC]
 
|[http://www.haskell.org/ghc/ GHC]
|Compiler and interpreter (GHCi)
 
  +
|コンパイラとインタプリタ (GHCi)
|Probably the most feature-complete system
 
  +
|おそらく最も多くの機能が実装されたシステム
 
|-
 
|-
 
|[http://www.haskell.org/hugs/ Hugs]
 
|[http://www.haskell.org/hugs/ Hugs]
|Interpreter only
 
  +
|インタプリタのみ
|Very portable, and more lightweight than GHC.
 
  +
|GHCより軽量でとてもお手軽
 
|}
 
|}
   
While both GHC and Hugs work on Windows, Hugs has perhaps the best
 
  +
WindowsではGHCとHugsの両方が動作しますが、HugsのほうがよりWindowsとの親和性が高いと思われます。しかし、GHCが最も活発に開発やメンテナンスが行われているので、たいていの人は入門者はもちろん、プログラミングになれた人にもGHCを勧めます。またここにも[[Mac OS X|Mac OS XにHaskellをインストールする]]方法が載っています。
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 42: 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 55: 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 63: 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 71: Line 63:
 
</haskell>
 
</haskell>
   
And compile it with:
 
  +
そして次のようにしてコンパイルします。
   
 
<pre>
 
<pre>
Line 77: 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 84: 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 93: 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 102: 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 110: Line 98:
 
</haskell>
 
</haskell>
   
And run it with Hugs as follows (this also works in GHCi):
 
  +
そしてHugsでは次のように実行します。(GHCでも同様にして動きます)
   
 
<haskell>
 
<haskell>
Line 118: 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 129: Line 115:
 
</haskell>
 
</haskell>
   
which can then be compiled and run:
 
  +
そしてコンパイルして実行します。
   
 
<pre>
 
<pre>
Line 137: 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 164: Line 150:
 
</haskell>
 
</haskell>
   
Compiling with -threaded and optimizations on:
 
  +
コンパイル時に -threaded と最適化オプションをつけます。
   
 
<pre>
 
<pre>
Line 172: Line 158:
 
</pre>
 
</pre>
   
And now we can run our multicore program. Here across two cores:
 
  +
これでマルチコアプログラムを動かすことができます。2コアの場合の例です。
   
 
<pre>
 
<pre>
Line 180: 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]]
 
  +
* [[10分で学ぶHaskell]]
 
* [http://darcs.haskell.org/yaht/yaht.pdf Yet Another Haskell Tutorial] (English)
 
* [http://darcs.haskell.org/yaht/yaht.pdf Yet Another Haskell Tutorial] (English)
 
* [http://www.haskell.org/tutorial/ A Gentle Introduction to Haskell] (English, [[Image:GentleFR.pdf|French PDF]])
 
* [http://www.haskell.org/tutorial/ A Gentle Introduction to Haskell] (English, [[Image:GentleFR.pdf|French PDF]])
 
* [http://learnyouahaskell.com/ Learn You A Haskell For Great Good!]
 
* [http://learnyouahaskell.com/ Learn You A Haskell For Great Good!]
   
For a complete list of textbooks, references and tutorials:
 
  +
書籍やチュートリアルのリストはここです:
   
 
* [[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]
 
* [[IRC channel]]
 
* [[IRC channel]]
  +
* [https://www.haskell.org/community/ www.haskell.org/community]
  +
* [https://haskell.jp/ Haskell-jp] (Japanese)
   
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]

Latest revision as of 07:44, 16 November 2019

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のチュートリアルや書籍があります。ここにいくつかおすすめを書いておきます。

チュートリアル

書籍やチュートリアルのリストはここです:

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

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

Languages: en