たしかPythonを使い始めてその良さが染み込み始めた頃、「リスト(っぽいいろんな型)の多彩さ」と「操作のシンプルさ」が気に入ったんだった。コードのスッキリした見た目も。
それまでのあたしは、配列と言ったら配列一種類であって、タプルとか辞書とか、なんのこっちゃだった。そんなのphpは一個の「配列」でおなじことやるよ?なんで分けてるの?って。
最初は楔形文字かと思っていたPythonのリスト内包表記なんかがだんだん読めるようになってきて、次第にphpで核プログラムのあちこちで、
リスト内包表記ができたら楽なのに
ここで関数を渡せたら楽なのに(仕事で使うphpは最新とは限りませんね!)
なんて思ったものでありました。
そういった視角からの目で見ますと、Haskellのいいところもやはり、リスト操作のシンプルさにあるのではないかと思えてきます。
Lispを学ぼうと思っていた頃は気持ち悪い概念だったcarとcdrも、こっちだとheadとtailですか、良い感じに慣れてきました。たぶんカーとかクダーとか、なにもイメージ出来ない奇妙な音で表現しているセンスに引いたんだと思います。「cdddr」とかああいうの。引くでしょ。
あれから年月は経ち、x:xsと書かれるだけで怒りゲージが上昇を始めていた当時のあたしはいません。
慣れるんだろうけど!慣れるんだろうけど!って連呼しながら腹を立てていた当時のあたしが非常に滑稽ではありますが、そういうみっともない足跡もブログに記していくのであります。ほんとに慣れるとは思ってなかった。
#昔話みたいに言ってますけど数週間前の話です
連長圧縮のとこでspanという関数が出てきていました。
Prelude> :t span span :: (a -> Bool) -> [a] -> ([a], [a]) Prelude> span (<3) [1..10] ([1,2],[3,4,5,6,7,8,9,10])
ちょうど反対の概念であるところのbreakというのもあると。
Prelude> break (<3) [1..10] ([],[1,2,3,4,5,6,7,8,9,10]) Prelude> break (>3) [1..10] ([1,2,3],[4,5,6,7,8,9,10])
filterって関数もあったよねえ。これ便利だなーと実感している関数の一つ。
Prelude> filter (<3) [1..10] [1,2] Prelude> filter (>3) [1..10] [4,5,6,7,8,9,10]
関数名 関数 リスト
の形式にみんな沿っていて、読みやすい。たぶんこれは慣れのせいで、(*2)を関数と認識できるようになった、というのが大きい。脳とは柔軟なものなんだな。
Prelude> span (=='A') $ init buff ("AA","BBCC") Prelude> span (=='A') $ tail buff ("A","BBCCC") Prelude> span (== head buff ) $ tail buff ("A","BBCCC") Prelude> span (== head buff) $ tail buff ("A","BBCCC") Prelude> break (== head buff) $ tail buff ("","ABBCCC") Prelude> filter (== head buff) $ tail buff "A" Prelude> filter (/= head buff) $ tail buff "BBCCC"
日々触るということが大事なのであります。
😀