てきとうなメモ

本の感想とか技術メモとか

Haskellの勉強

Haskellの勉強も始めた.教科書としては以下のものを使ってる.

入門Haskell―はじめて学ぶ関数型言語

Haskellとは

Haskellとは純粋関数型言語の一つ.全ては関数である.「純粋」な関数とは副作用を持たない関数のことである.その意味ではLispSchemeは純粋な関数型言語ではない

処理系

Hugsは軽量で可搬性の高いインタプリタである.コンパイル時間が速く,インクリメンタルなコンパイルを行うことも出来る.しかし,インタプリタであるため実行時のパフォーマンスが落ちる.

GHCHugsより遅くメモリ消費が大きい.しかし,生成されたコードの実行時間ははるかに速くなる.

その他の処理系についてはここを参照

ダウンロードとインストール

GHCは6.4.1のバイナリをインストールした.
HugsDarwinportsを用いてMarch 2005のバージョンをインストールした.

Hello, World

-- Hello, World
main = putStrLn "Hello, World!"

'--'以降がコメント.'main ='となっているのは,mainという関数を定義している.Cと同じようにプログラムはmain関数を実行する.putStrLnは文字列を受け取って改行付きで標準出力に出力する関数.

コマンド

ghc

ghcgccみたいな感じのインターフェース.

$ ghc -o hello hello.hs
$ ./hello
Hello, World
$
runhugs

hugsインタプリタ

$ runhugs hello.hs
Hello, World
$
ghci

GHCインタラクティブインタプリタ

$ ghci hello.hs 
   ___         ___ _
  / _ \ /\  /\/ __(_)
 / /_\// /_/ / /  | |      GHC Interactive, version 6.4.1, for Haskell 98.
/ /_\\/ __  / /___| |      http://www.haskell.org/ghc/
\____/\/ /_/\____/|_|      Type :? for help.

Loading package base-1.0 ... linking ... done.
Skipping  Main             ( hello.hs, hello.o )
Ok, modules loaded: Main.
Prelude Main> main
Hello, World
Prelude Main> Leaving 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
||   ||                         Report bugs to: hugs-bugs@haskell.org
||   || Version: March 2005     _________________________________________

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

Type :? for help
Main> main
Hello, World

Main> [Leaving Hugs]
$