shokosブログ

プログラミング

Haskell版文芸的プログラミング

こちらのイベントに参加してきました第0回 スタートHaskell : ATND

色々もりだくさんで、有意義な時間がすごせたと思っています。
どうもありがとうございました!

そこで出たおもしろい話。

文芸的プログラミング

きいたことありますか?わたしは知らなかった。

文芸的プログラミング - Wikipedia

文芸的プログラミングではドキュメントとソースを併記したWEBと呼ばれるメタソースを記述し、そこからドキュメントとソースコードをそれぞれ生成させること

     ____   
   /      \ 
  /  ─    ─\  
/    (●)  (●) \ ・・・
|       (__人__)    |   
/     ∩ノ ⊃  / 
(  \ / _ノ |  | 
.\ “  /__|  |   
  \ /___ /   


ドキュメントとソースを同じファイルに書くらしい!


今日学んだことをふまえて、通貨のデータ構造をもっていて、ドル換算してくれるテキトーなサンプルコードを文芸的プログラミングで書いてみた。

通貨のデータ構造

> data Currency = Dollar Float
>               | Yen Float
>               | Euro Float

ドル換算(レートは2011/07/24のもの)

> exchangeDollar :: Currency -> Float
> exchangeDollar (Dollar a) = a
> exchangeDollar (Yen a) = a * 0.01
> exchangeDollar (Euro a) = a * 1.44

Currency.lhs


実行結果

*Main> let d = Dollar 100
*Main> exchangeDollar d
100.0
*Main> let y = Yen 100
*Main> exchangeDollar y
1.0
*Main> let e = Euro 100
*Main> exchangeDollar e
144.0


ポイントを箇条書き
・コメントをそのまま書いて、ソースコードをコメントアウトしたような見た目
・拡張子は.lhs(もちろんHaskellの場合)
・GHCで普通にコンパイル通る
・>の後はスペースあけないとコンパイルエラー
・ドキュメントとソースは1行あけないとコンパイルエラー


文芸的プログラミングって言葉自体初耳で、利点とか欠点とか正直あまりよくわかりません。
ただおもしろいなって思ったのでご紹介。


Haskellに限ったプログラミング概念ではないと思うので、他の言語にもありそう。