あたくしにとってドット(.)というのは、文字列結合を指すものにほかなりませんでした。後にいろんな世界で色んな意味をもつ記号であることを知るにいたり、言語ごとの思想の違いであるとかに目がクラクラした次第であり、し続けている次第であります。
ほんでHaskell。
ドットつなぎは、関数合成です(キリ
あー、そっすか。関数の、合成っすか。失敗すると外道スライムが沸いたりするっすか?
すごいHaskellのp99。
import Data.Char
import Data.List
digitSum :: Int -> Int
digitSum = sum . map digitToInt . show
数字列を受け取り文字列に変換して、各文字(数字)の合計をするというサンプル。本にある例文です。
1234と入れたら、1+2+3+4で10を返すと。
で、これがまたわからない。ドットが関数合成なるものであることは見ました本で。
で、これ、えーと、引数どこいった。
これはえーと、あまりにも引数が自明なあまり省略しましたみたいな話ですか?
で、色々こねくり回していると、どうも、
digitSum 1234
は、
(sum (map digitToInt (show 1234)))
と等しいようだということがわかりました。
- showは受け取った値を文字列にする、 1234→”1234”
- digitToIntは文字0-fを数値にする、 “1”→1
- mapはdigitToIntを各桁に対して行う、 [“1”,“2”,“3”,“4”]→[1,2,3,4]
- sumで合計する 1+2+3+4
とすると、
digitSum = sum . map digitToInt . show
の右端から順に読んでいくと同じことになるわけだー?
なんで右から読むのと左から読むのとあるんだ。読む向きがわかんなくて目がチカチカする。。。
リスト内包表記もPythonさん経由で慣れてるというのは大きいにしろ、やはり視線が左右に泳ぐ傾向があり、さくっとわかりやすく、左から右へ、流れるように読みたいものだと思う昨今です。
どちらを先に学んだかでしかないんだろうけど、
Haskell:
sum . map digitToInt . show
これと、
jQueryなど:
uu().yaa().taa()
みたいなのがこう、頭のなかで混ざってですね、マーブル模様になるんすよ。
関数の合成とメソッドチェーンとは違うものか?きっと違うな?少なくとも読む方向は逆だな?
そんなかんじでモヤモヤしております。
違う思想、哲学、体系を学ぶというのは、ほんとうに大変なことだなあ。
このままじゃ脳が外道スライムになるっすよー。
