Drkcore

03 01 2007 Haskell Tweet

ポイントフリーなhead.hs

下の式を完全なポイントフリースタイルにする方法を色々と考えてみたんだけど。

firstNLines n = unlines . take n . lines

結局分からんかったので、mixiで聞いてみたらさくっと教えてもらえた(ありがたい)。

unlines . take n . lines
(unlines . take n) . lines
(. lines) (unlines . take n)
(. lines) ((unlines .) (take n))
((. lines) . (unlines .)) (take n)
((. lines) . (unlines .)) . take
(. lines) . (unlines .) . take

.って演算子として考えればよいらしい。だから、左側を取るように書き換えてやればいいのか。

Prelude> 5 + 7
12
Prelude> (+ 7) 5
12

(+)だとこんな感じ。

型を確認すると

Prelude> :type (.)
(.) :: (b -> c) -> (a -> b) -> a -> c

.は(b -> c)と(a -> b)という関数をとってa->cという関数を合成する関数(二項演算子?)なのか。

(.) :: (b -> c) -> (a -> b) -> (a -> c)

関数合成で、変数が消えていくのは、こういうことなのね。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021