タグ

ブックマーク / jutememo.blogspot.com (4)

  • Python のリスト内包表記 - Ruby や Haskell の書き方と比べながら

    0. Python の気になる機能  Python チュートリアル の目次をざっと眺め、目にとまったのは次の二つの機能。 5.1.4 リストの内包表記 9.9 ジェネレータ (generator) 両方とも耳馴れない言葉。 (@_@) まずは、リストの内包表記から調べることに。 1. リスト内包表記の基 a. リストの各要素に関数を適用する 最初は、リスト内包表記の使い方を確認する。例として、「数値のリストの各要素を 2 倍する」 print [x*2 for x in [1,2,3,4,5]] 初めて見たとき、どこから読めばいいのか検討がつかなかった。 読む順番は、 for によって、各要素を取り出し、 各々に対して、操作を加える。 というように、後ろから前へと読み進める。 b. リストの各要素から、条件にあったものを抽出する 次に、同じく数値のリストから、特定の条件に合う要素を抽出す

    Python のリスト内包表記 - Ruby や Haskell の書き方と比べながら
    tsu-nera
    tsu-nera 2015/06/19
  • Haskell の代数的データ型と型クラス、instance 宣言の関係

    1. クラスとメソッドが主役で、「関数」は脇役だと思っていた 関数型言語である Haskell で使用される用語には、Java, Ruby などのオブジェクト指向な言語で使われている用語と、類似しているものがある。しかし、似て非なるものがあるので、気をつけなくてはいけない。 (+_+) ところで、関数型言語に触る前は、 「関数」 というものを、一段低い存在として認識していた。 言語を学習した順序が C → JavaRuby。途中で Smalltalk をちらっと横目で見た、という流れだったので、 「やっぱプログラムの中心はクラス、オブジェクトでしょ」 と思い込んでいた。 しかし、Ruby のブロック付きメソッドを見てから、 「ん?なんだこれ?」 と違和感と疑問を感じはじめ、 JavaScript の関数で 「関数もオブジェクトなの?」 と混乱し、そして Haskell で ファースト

    Haskell の代数的データ型と型クラス、instance 宣言の関係
    tsu-nera
    tsu-nera 2014/12/07
  • Haskell の mapM_ – foldr と (>>) を意識して

    1. mapM_ 関数は、どのように定義されているのか? Haskell の print 関数で文字列を連続して出力させたい場合、次のように書く。 main = do print "hoge" print "piyo" print "fuga" これを短かく書きたいなら、 main = mapM_ print ["hoge", "piyo", "fuga"] 最初、意味もわからず mapM_ の動作を覚えようとした。 ^^; なぜこのように書けるのだろう? 2. map, fold 系の復習から まずは map, fold 系の復習から。 map 関数は「各要素へ指定された関数 f を適用」する。 リストの要素を 2 倍するなら、 *Main> map (*2) [0..5] [0,2,4,6,8,10] これに対して、fold 系 の関数は大雑把なイメージとして、「各要素の間に二項演算子

    Haskell の mapM_ – foldr と (>>) を意識して
  • Haskell の sequence 関数 - foldr をイメージして

    「Haskell の mapM_ – foldr と (>>) を意識して」のつづき 1. mapM_ 関数を理解するには、sequence 関数の理解が不可欠 前回は、 mapM_ 関数 の動作について見た。しかし、どうも感覚的に全然身に付いていない。 mapM_ を使おうとすると、 「あれ?一体これ何してるんだっけ」 と考え込んでしまう。返り値に関心のある mapM にしても同じ。 多分、この関数のベースとなっている sequence 関数 をちゃんと理解してないために、頭の中にイメージを描けないと思う。 (+_+) Prelude には、 sequence :: Monad m => [m a] -> m [a] Evaluate each action in the sequence from left to right, and collect the results. 型を見れ

  • 1