開発環境
- OS X Mavericks - Apple(OS)
- BBEdit - Bare Bones Software, Inc., Emacs (Text Editor)
- Haskell (純粋関数型プログラミング言語)
- GHC (The Glasgow Haskell Compiler) (処理系)
- The Haskell Platform (インストール方法、モジュール等)
C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅢ部(高度なプログラミング概念)の17章(高度なポインタ)、17-12(プログラミング実習)、実習17-2.をHaskellで解いてみる。
その他参考書籍
- プログラミングHaskell (オーム社) Graham Hutton(著) 山本 和彦(翻訳)
- Real World Haskell―実戦で学ぶ関数型言語プログラミング (オライリージャパン) Bryan O'Sullivan John Goerzen Don Stewart(著) 山下 伸夫 伊東 勝利 株式会社タイムインターメディア(翻訳)
17-12(プログラミング実習)、実習17-2.
コード(BBEdit)
Sample.hs
{-# OPTIONS -Wall -Werror #-}
main :: IO ()
main = do
print langLinkedList
let langs1 = linkedListRemove "c" langLinkedList
langs2 = linkedListRemove "python" langs1
langs3 = linkedListRemove "dart" langs2
langs4 = linkedListRemove "haskell" . linkedListRemove "scheme" $ langs3
mapM_ print [langs1, langs2, langs3, langs4]
data LinkedList a = Empty | LinkedList a (LinkedList a) deriving (Show)
mkLinkedList :: a -> LinkedList a
mkLinkedList x = LinkedList x Empty
linkedListAdd :: a -> LinkedList a -> LinkedList a
linkedListAdd x Empty = mkLinkedList x
linkedListAdd x (LinkedList a l) = LinkedList a (linkedListAdd x l)
linkedListRemove :: (Ord a) => a -> LinkedList a -> LinkedList a
linkedListRemove _ Empty = Empty
linkedListRemove x (LinkedList a l) =
if x == a then l else LinkedList a (linkedListRemove x l)
langLinkedList :: LinkedList String
langLinkedList = foldr LinkedList Empty langs
langs :: [String]
langs = ["python", "c", "scheme", "haskell", "dart"]
入出力結果(Terminal, runghc)
$ runghc Sample.hs LinkedList "python" (LinkedList "c" (LinkedList "scheme" (LinkedList "haskell" (LinkedList "dart" Empty)))) LinkedList "python" (LinkedList "scheme" (LinkedList "haskell" (LinkedList "dart" Empty))) LinkedList "scheme" (LinkedList "haskell" (LinkedList "dart" Empty)) LinkedList "scheme" (LinkedList "haskell" Empty) Empty $
慣れるまでは{-# OPTIONS -Wall -Werror #-}の記述を消さずに細かく型を指定していくことに。
0 コメント:
コメントを投稿