x:xs問題が脳に染み込みはじめたことで、急にHaskellが読みやすくなりました。進歩です。
読める気になり始めたという方が真実に近いかもしれない。
むろんまだまだイライラの種は尽きないので、このへん一個ずつやっつけないと進めそうにないです。
すごいHaskellのp.38に「リストのパターンマッチとリスト内包表記」という項目があります。
let xs = [(1,3),(4,3),(2,4),(5,3),(5,6),(3,1)] [a+b | (a,b) <- xs] [4,7,6,8,11,4]
うん、「<-」にイラっとこないわけじゃないが、ここはわかる。Pythonやってて良かった。phpだけだったらきっと未だに読めてなかった。 びっくりしたのはつぎの例文で、
[x*100+3 | (x,3) <- xs] [103,403,503]
面妖な。いや、これはすごい。利用シーンちょっと思いつかないし、必要なときにこのやり方を思い出せる自信は全然無いけど、
[x*100+3 | (x,y) <- xs, y==3] [103,403,503]
これと同じ結果をパターンマッチングで得るってことなわけだ。どっちがよりHaskellらしいとかは知らないし、さしあたり考えないけれど、あたしが不機嫌になり続けた「Haskellのリストとは先頭と何かである」問題と同様に、パターンマッチングというものが随所に染み込んでいるのだなということはわかってきました。
仕掛けはわかってきたが
取り扱うデータに対して、パターンマッチングを適用することで上手に利用できますね、とか、これは違うやり方が必要ですね、とか、そういった見極めの按配がわかってないんです。
「ふーん、いつつかうの?」
という、実際の利用に即した風景が見えてないもんだから、しばらくイライラし続けることにはなりそうです。