Haskell勉強会

関数型プログラミングの学習日記

Elixirの関数のヘッド

Elixirで「関数のヘッド」という用語があった。

いまいちピンと来なかったので、意味を調べてみた。

 

プログラミングElixir

プログラミングElixir

 

 

関数のヘッドとは?

(p.52)

複数のヘッドを持つ関数があり、そのうち一つは、デフォルトパラメータを持つ。

 

(p.53)

デフォルトパラメータを含む関数のヘッドだけを、ボディなしで追加して、あとの関数定義では、通常のパラメータを使おう。

 

  • 関数のヘッド
  • 関数のボディ

という用語が出てきた。

 

索引を見たら、関係ありそうな説明があった。

(p.293)

無名関数

無名関数は (head -> return_type) を使って型を指定する。

head では、アリティと、関数パラメータが取りうる型を指定する。

もし分かりやすくしたければ、head には括弧を付けることができる。

 

Googleで検索してみた。

Elixir 関数 ヘッド - Google 検索

funasimin.hatenablog.com

 

関数の引数のパターンの部分を「ヘッド」と言うらしい。

 

elixir-lang.github.io

 

If a function with default values has multiple clauses, it is required to create a function head (without an actual body) for declaring defaults:

 

defmodule Concat do
  def join(a, b \\ nil, sep \\ " ")

  def join(a, b, _sep) when is_nil(b) do
    a
  end

  def join(a, b, sep) do
    a <> sep <> b
  end
end

IO.puts Concat.join("Hello", "world")      #=> Hello world
IO.puts Concat.join("Hello", "world", "_") #=> Hello_world
IO.puts Concat.join("Hello")               #=> Hello

 

名前付き関数の場合、関数名と引数の部分を「ヘッド」と呼び、関数本体の部分を「ボディ」と呼んでいた。

 

上記の例だと、

join(a, b \\ nil, sep \\ " ")

という部分が関数のヘッドになる。

 

Elixirのコードの各部で、

defmodule モジュール名 do
  def 関数のヘッド do
    関数のボディ
  end
end

という名称が付けられていた、というわけだ。

 

些細なことかもしれないけど、本文中で初出の用語は、注釈があると良い。