ふつける(0) 1.1 - 2.2 Hello, Haskell World!!

通称「ふつける」と呼ばれる、

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

を読んでいきたいと思います。

この本を読もうと思った訳

一応書いておこう。

  • 文字列とIOを学びたい。
    • 第一の目的は関数型言語を使った文字列処理を学びたいって所。モナドの凶悪さも・・・。
  • 遅延評価が凄いらしい
    • 遅延評価な言語といえばHaskell。遅延評価を学びたい。
  • めちゃくちゃ早いらしい
    • たらい回し関数が早いという噂。

あんまり決意は無い感じです(汗

飽き性なので同時並行で色々な本を読んでいく方針です。

インストール

ghchugsが入ってたので、略。どっちをメインに使うか考え中。

マニュアルの検索システムhrefが青木さんの所からダウンロードできるので、

haskell - バリケンのHaskell日記 - Haskellリファレンスマニュアル「href」のインストール

を見ながらセットアップ。

refe同様愛用させていただきます!!

Hello, Haskell World!!

とりあえずHello, Worldだぁ!!

hello.hs
main = putStrLn "Hello, Haskell World!!"

うは。ナンダコレ。

関数型言語はとにかく面倒な名前が多い。とりあえず解説を読むと。

  • main = ...で、変数mainを定義できる。
    • 変数というのがわかんない。
    • 僕の中の定義は名前を付けること。つまり抽象。変数じゃない気がする。
  • putStrLen "hoge" で、関数を「適用」する。
    • Schemeでは「作用」という言葉を使った気がする。
  • main,putStrLenはアクション?
    • アクションとはなんだろう・・・

イマイチわかんないところがあるけど、とりあえず進んでもう一度読みかえそう。


Haskellの使い方は色々あるらしいので、ガガーっと試してみます。

ghc

ふつける推奨のghcを試してみる。

% ghc -o hello hello.hs
% ./hello
Hello, Haskell World!!
% runghc hello.hs
Hello, Haskell World!!
% ghci hello.hs
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.6.1, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base ... linking ... done.
Ok, modules loaded: Main.
Prelude Main> main
Hello, Haskell World!!
Prelude Main> :q
Leaving GHCi.
% ghci
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.6.1, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base ... linking ... done.
Prelude> putStrLn "Hello, Haskell, World!!"
Hello, Haskell, World!!
Prelude> :l hello.hs
Ok, modules loaded: Main.
Prelude Main> main
Hello, Haskell World!!
Prelude Main> :q
Leaving GHCi.
  • ghcコンパイラ
  • runghcはコンパイラを通さなくてもいい。
  • ghciは対話的環境 viっぽいコマンドが使える。
    • mainでmainの実行。
    • :lでロード出来る。
    • :!でシェルコマンドも使える。!vimしよう。
    • :qで終了
    • ghci関数を適用するときは、putStrLn "Hello, ..."
    • ghci上では関数を定義出来ない。
      • 純粋過ぎる・・・。

色々あるな・・・。

hugsを試す。

次はhugs

% hugs hello.hs
__   __ __  __  ____   ___      _________________________________________
||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__||  __||     Copyright (c) 1994-2005
||---||         ___||           World Wide Web: http://haskell.org/hugs
||   ||                         Bugs: http://hackage.haskell.org/trac/hugs
||   || Version: September 2006 _________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Type :? for help
Main> main
Hello, Haskell World!!

Main> :q
[Leaving Hugs]
% hugs
__   __ __  __  ____   ___      _________________________________________
||   || ||  || ||  || ||__      Hugs 98: Based on the Haskell 98 standard
||___|| ||__|| ||__||  __||     Copyright (c) 1994-2005
||---||         ___||           World Wide Web: http://haskell.org/hugs
||   ||                         Bugs: http://hackage.haskell.org/trac/hugs
||   || Version: September 2006 _________________________________________

Haskell 98 mode: Restart with command line option -98 to enable extensions

Type :? for help
Hugs> :l hello.hs
Main> main
Hello, Haskell World!!

Main> :q
[Leaving Hugs]

使い方はghciと一緒っぽい。

まとめ

慣れかな・・・。