Haskell-プログラムの記述について
コメントの記述方法
Haskellのコメント記述方法(通常の書式において)は以下の2種類があります。
単一行をコメントアウトする場合には「--」を記述します。
複数行をコメントアウトする場合には「{--}」を記述します。
-- コメント
main = putStrLn "Hello, Haskell!"
{-
複数行での
コメント
-}
Haskellプログラムの記述と拡張子
Haskellのソースコード記述方法には、通常の書式、LaTeX モード、Bird モードの三種類があります。
通常の書式
通常書式ファイルの拡張子は「.hs」とします。
$ cat quick_sort.hs
#!/usr/bin/env runghc
-- コメント : Quick Sort
qsort _ [] = []
qsort f (x:xs) = before ++ (x : after)
where before = qsort f (filter (not . (f x)) xs)
after = qsort f (filter (f x) xs)
main = print( qsort (<) [3, 4, 5, 1, 2, 7, 6] )
$ ./quick_sort.hs
[1,2,3,4,5,6,7]
LaTeX モード
リテラル形式ファイルの拡張子は「.lhs」とします。
(通常のファイル拡張子「.hs」では、処理系が解析しません。)
\begin{code} と \end{code} に挟まれた部分がコードでそれ以外はコメントです。
$ cat quick_sort.lhs
#!/usr/bin/env runghc
コメント : Quick Sort
\begin{code}
qsort _ [] = []
qsort f (x:xs) = before ++ (x : after)
where before = qsort f (filter (not . (f x)) xs)
after = qsort f (filter (f x) xs)
main = print( qsort (<) [3, 4, 5, 1, 2, 7, 6] )
\end{code}
$ ./quick_sort.lhs
[1,2,3,4,5,6,7]
Bird モード
リテラル形式ファイルの拡張子は「.lhs」とします。
行頭に「>」を記述した行がコードであり、それ以外はコメントとして扱われます。
$ cat quick_sort.lhs
#!/usr/bin/env runghc
コメント : Quick Sort
>qsort _ [] = []
>qsort f (x:xs) = before ++ (x : after)
> where before = qsort f (filter (not . (f x)) xs)
> after = qsort f (filter (f x) xs)
>main = print( qsort (<) [3, 4, 5, 1, 2, 7, 6] )
$ ./quick_sort.lhs
[1,2,3,4,5,6,7]
インデントについて
Haskellでは、インデントがより深ければ、それ以前の行の一部となります。
逆にインデントが浅ければ、一連の処理ブロックが終了することを意味します。
これは「レイアウト」と呼ばれ、行の区切り文字や中括弧を省略するために用いられる記述形式です。
レイアウトを使う場合は、インデントにタブを用いると想定していない動作を起こす可能性があります。
複数人で開発する場合などはスペースを用いることで統一したほうが賢明です。
また、プロポーショナルフォントによるレイアウト不具合が発生する可能性もありますので、注意する必要があります。
糖衣構文(syntactic sugar)
糖衣構文とは、プログラミングを読み書きしやすくするための表現方法です。
プログラムの基本構文の別表現であり、記述能力を拡張するものではありません。
$キーワード
「$」は以降の記述を一つのまとまりとします。
括弧で括る代わりに用いることで、可読性のない深いネストを解消します。
$の左右が()で括られたものに等しくなります。
以下は同じ式になります。
func1 x $ func2 y z $ func 3 a b c
(func1 x) ( (func2 y z) (func3 a b c) )