categoryHaskell

関数定義

trackback1  comment0
プログラミング覚書 Haskell-007

関数定義
----------------------------------------------------------------------

module Main where

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

main = do putStrLn "What is 5! ?"
x <- readLn
if x == factorial 5
then putStrLn "You're right!"
else putStrLn "You're wrong!"

----------------------------------------------------------------------
categoryHaskell

入出力 readLn putStrLn

trackback1  comment0
プログラミング覚書 Haskell-006

入出力 readLn putStrLn
----------------------------------------------------------------------

main = do putStrLn "What is 2 + 2?"
x <- readLn
if x == 4
then putStrLn "You're right!"
else putStrLn "You're wrong!"

----------------------------------------------------------------------
=
categoryHaskell

tail.hs

trackback1  comment0
プログラミング覚書 Haskell-005

tail.hs
 標準入力の最後の10行を出力
----------------------------------------------------------------------

main = do cs <- getContents
putStr $ lastNLines 10 cs

lastNLines n cs = unlines $ takeLast n $ lines cs

takeLast n ss = reverse $ take n $ reverse ss

----------------------------------------------------------------------
 ・reverse関数:リストを逆順にする
categoryHaskell

head.hs

trackback1  comment0
プログラミング覚書 Haskell-004

head.hs
 標準入力の最初の10行を出力
----------------------------------------------------------------------

main = do cs <- getContents
putStr $ firstNLines 10 cs

firstNLines n cs = unlines $ take n $ lines cs

 ・4行目は関数firstNLinesの定義
 ・take関数:リストの先頭からn要素をとったリストを返す
----------------------------------------------------------------------
categoryHaskell

countline.hs

trackback1  comment0
プログラミング覚書 Haskell-003

countline.hs
 標準入力の行数を数える
----------------------------------------------------------------------

main = do cs <- getContents
print (length (lines cs))

----------------------------------------------------------------------
 ・lines関数:文字列を行のリストに分割
 ・length関数:リストの長さ(要素の数)を返す
categoryHaskell

cat.hs

trackback1  comment0
プログラミング覚書 Haskell-002

cat.hs
 標準入力をそのまま標準出力へ出力する
 ファイルのリダイレクトで内容を簡単に見るのに便利
----------------------------------------------------------------------

main = do cs <- getContents
putStr cs

----------------------------------------------------------------------
 ・「cs <- getContents」と「putStr cs」の頭を揃えるのをレイアウトと云う。
   これでdo式は2つの式をまとまりとみなす。
 ・変数csをgetContentsアクションの結果に束縛する。
categoryHaskell

good.hs

trackback1  comment0
プログラミング覚書 Haskell-001

good.hs
----------------------------------------------------------------------

main = putStrLn "Good Morning!!"

コンパイル
ghc good.hs -o good
実行例
good
Good Morning!!

----------------------------------------------------------------------
 ・Haskellプログラムはmainアクションから始まる。
 ・「main = ... 」は変数mainの定義
New «‡Top‡» Old