Drkcore

14 06 2012 Haskell Tweet

Haskellで九九

文脈を読む感じで。

Prelude Control.Applicative> [(x*) | x <- [1..9]] <*> [1..9]

リスト内包表記が操作してる感を醸し出しているので排除する。

Prelude Control.Applicative> (*) <$> [1..9] <*> [1..9]

2つのリストから値を取り出しては、可能な組み合わせ全てに対して掛け算をする。

Prelude Control.Applicative> :t ((*) <$>)
((*) <$>) :: (Functor f, Num a) => f a -> f (a -> a)

Prelude Control.Applicative> :t [1..9] <*> [1..9]
[1..9] <*> [1..9]
  :: (Enum a, Enum (a -> b), Num a, Num (a -> b)) => [b]

さらに、これをliftAを使って書き直せば

Prelude Control.Applicative> liftA2 (*) [1..9] [1..9]

これは、掛け算っていう演算をアプリカティブの文脈に持ちあげておいて、リストに適用するっていう理解でいいのかな。

Prelude Control.Applicative> :t liftA2 (*)
liftA2 (*) :: (Num c, Applicative f) => f c -> f c -> f c

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


About

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

Tag

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

Ad

© kzfm 2003-2021