Drkcore

01 06 2012 Haskell Tweet

代入とは状態付きの計算

14.3 計算の状態の正体

これは、僕のなかで非常に納得のいくものだった。

Haskell以外のほとんどの言語における「代入」という操作は、状態付きの計算と捉えることができます。

MooseやPythonでlispとかschemeを書いたことがあったが、そのときに環境というスタックを用意したなぁと妙に納得した。

ProductName すごいHaskellたのしく学ぼう!
Miran Lipovača
オーム社 / 2940円 ( 2012-05-23 )


この本は、日本の初級Haskellerのレベルを押し上げる役割を担うんじゃないかなぁと。少なくとも僕は本書を読んだことで、haskell細胞が進化した(by トリコ)

それからWriterモナドが面白いなぁと改めて思ったので写経。

import Control.Monad.Writer

gcd' :: Int -> Int -> Writer [String] Int
gcd' a b
     | b == 0 = do
         tell ["Finished with " ++ show a]
     return a
     | otherwise = do
         tell [show a ++ " mod " ++ show b ++ " = " ++ show (a `mod` b)]
     gcd' b (a `mod` b)

実行すると、ログがついて回るのでsndで抜き出す。

*Main> mapM_ putStrLn $ snd $ runWriter (gcd' 4351 3776)
4351 mod 3776 = 575
3776 mod 575 = 326
575 mod 326 = 249
326 mod 249 = 77
249 mod 77 = 18
77 mod 18 = 5
18 mod 5 = 3
5 mod 3 = 2
3 mod 2 = 1
2 mod 1 = 0
Finished with 1

Haskellはやっぱり面白いなぁ。もう少し書けるようになりたい。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021