■
http://haskell.g.hatena.ne.jp/hyuki/20060605/splitat
疑問のところについて考えてみる。
- 最初に思いついた形
zipWith (\f x -> f x) (zipWith (\f x -> f x) [take,drop] (replicate 2 n)) (replicate 2 xs)
- 関数適用は$だね
zipWith ($) (zipWith ($) [take,drop] replicate 2 n) (replicate 2 xs)
- mapで出来るんじゃ・・・[m,n]は(m,n)に変形しとこう
case map ($ xs) $ map ($ n) [take,drop] of [m,n] -> (m,n)
- パターンマッチ慣れてないから無名関数で変形した方が分かりやすい
(\[a,b]->(a,b)) (map ($ xs) $ map ($ n) [take,drop] )
- nやxsを後の方に置いてみよう.ポイントフリー記法が分からない・・
(\[a,b]->(a,b)) (flip(map) ( flip(map) [take,drop] ($ n)) ($ xs))
- 戻そう。そういえば最初の形は(take,drop)じゃないとダメなのか
(\[a,b]->(a,b)) (map ($ xs) (map ($ n) (map ($ (take,drop)) [fst,snd] )) )
- 一見畳み込める(?)気がしたけど型が合わなくて残念。
結局分からなかった。いつか関数合成や部分適応を使いこなしたい。