Difference between revisions of "Haskell入門 5ステップ"
Ymotongpoo (talk | contribs) |
Takenobu.hs (talk | contribs) (Add communities of haskell.org and haskell.jp) |
||
(4 intermediate revisions by one other user not shown) | |||
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]]. |
||
− | == |
+ | == 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 |
+ | == 電卓としての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> |
||
− | ''' |
+ | '''すごい!''' |
+ | ===初めての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: |
||
− | ''' |
+ | '''チュートリアル''' |
+ | * [[10分で学ぶHaskell]] |
||
− | * [[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) |
||
* [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!''' |
||
+ | いろんな人に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] |
||
* [[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のチュートリアルや書籍があります。ここにいくつかおすすめを書いておきます。
チュートリアル
- 10分で学ぶHaskell
- Yet Another Haskell Tutorial (English)
- A Gentle Introduction to Haskell (English, File:GentleFR.pdf)
- Learn You A Haskell For Great Good!
書籍やチュートリアルのリストはここです:
コミュニティに参加しましょう!
いろんな人にHaskellコミュニティを紹介してください:
Languages: en