haskell-jp / beginners #17 at 2021-07-18 13:15:30 +0900

takumi_matsuura
初心者です。
このサイト()に
fun n xs = xs ! ! (n - 1)と
fun = (last . ) . take . ( + 1)が
同じと書かれているのですがよくわかりません。
特に(last . ) . というのが何を表しているのかが分からないのですが、これはなんなのですか?
まず、ご存知だとは思いますが . は関数合成をする右結合の演算子です。
次に、 ( ) . take . ( ) というのは、この3つの関数を合成することを意味します。
さらに、`(last .)` というのはセクション記法で、「関数を受け取って、その関数に last を合成したものを返す」ものです。

流れは以下のようになります。
まず、整数 nfun に入ってきます。
n は関数 (+ 1) の作用を受けて n + 1 になります。
さらに、関数 take の作用を受けて、「リストを受け取り、リストの最初の n+1 個を返す関数」になります。
最後に、 (last .) の作用を受けます。これにより、上記の関数は
「リストを受け取り、リストの最初の n+1 個を返」したあと「そのリストの一番最後の値を返す」ような関数に変換されます。
これは、リストの n 番目(ただし n は1-indexed)で取得する関数と等価になります。
takumi_matsuura
とてもわかりやすかったです。
教えていただきありがとうございます。