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

From HaskellWiki
Jump to navigation Jump to search
 
Line 1: Line 1:
  +
Haskellは汎用の純粋関数型プログラミング言語です。このページではなるべく早くHaskellが使えるようになるよう手助けとなる解説をします。
Haskell is a general purpose, purely functional programming language.
 
This page will help you get started as quickly as possible.
 
   
 
__TOC__
 
__TOC__
   
== Install Haskell ==
+
== Haskellのインストール ==
   
  +
他の多くのプログラミング言語と同様に、Haskellは2種類の方法で使うことができます。
Haskell, like most other languages, comes in two flavors: batch oriented
 
  +
一つバイナリ(コンパイラ)でもう一つはインタラクティブシェル(インタプリタ)です。
(''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]
  +
|コンパイラとインタプリタ (GHCi)
|Compiler and interpreter (GHCi)
 
  +
|おそらく最も多くの機能が実装されたシステム
|Probably the most feature-complete system
 
 
|-
 
|-
 
|[http://www.haskell.org/hugs/ Hugs]
 
|[http://www.haskell.org/hugs/ Hugs]
  +
|インタプリタのみ
|Interpreter only
 
  +
|GHCより軽量でとてもお手軽
|Very portable, and more lightweight than GHC.
 
 
|}
 
|}
   
  +
WindowsではGHCとHugsの両方が動作しますが、HugsのほうがよりWindowsとの親和性が高いと思われます。しかし、GHCが最も活発に開発やメンテナンスが行われているので、たいていの人は
 
While both GHC and Hugs work on Windows, Hugs has perhaps the best
 
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
 
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

Revision as of 15:52, 3 December 2009

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

Haskellのインストール

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

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

WindowsではGHCとHugsの両方が動作しますが、HugsのほうがよりWindowsとの親和性が高いと思われます。しかし、GHCが最も活発に開発やメンテナンスが行われているので、たいていの人は 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 installing Haskell software on Mac OS X.

Start Haskell

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.

    $ 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>

And you are presented with a prompt. The Haskell system now attentively awaits your input.

Write your first Haskell program

If you've learned to program another language, your first program probably was "Hello, world!", so let's do that:

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

The Haskell system evaluated the string, and printed the result. Or we can try a variation to print directly to standard output:

Prelude> putStrLn "Hello World"
Hello World

Using a Haskell compiler, such as GHC, you can compile the code to a standalone executable. Create a source file hello.hs containing:

main = putStrLn "Hello, World!"

And compile it with:

    $ ghc -o hello hello.hs

You can then run the executable (./hello on Unix systems, hello.exe on Windows):

    $ ./hello
    Hello, World!

Haskell the calculator

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:

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

This defines a new function called fac which computes the factorial of an integer.

We can now run fac on some argument:

Prelude> fac 42
1405006117752879898543142606244511569936384000000000

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:

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

And run it with Hugs as follows (this also works in GHCi):

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

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):

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

main = print (fac 42)

which can then be compiled and run:

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

Great!

Write your first parallel Haskell program

Haskell has good support for parallel and multicore programming. We can write a parallel program by adding `par` to expressions, like so:

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)

Compiling with -threaded and optimizations on:

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

And now we can run our multicore program. Here across two cores:

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

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:

Tutorials

For a complete list of textbooks, references and tutorials:

Join the community!

Talk to others in the Haskell community:

Languages: en