iex
を使って対話的に実行しながら処理の流れ図を描くと理解しやすいかもしれません。今回は順に説明しますので、次回からはぜひご自身で解いてみてください。
ここではmapsum
を以下のように使います。
iex
1iex> Mylist.mapsum([1, 2, 3], &(&1 * &1))
214
Mylist.len([1,2,3])
の図を参考にmapsum
の処理の流れ図を描いてみましょう。func.(head)
の部分がどうなるのかはいまは考えず、そのままfunc.(1)
のようにしておきます。
elixir
1mapsum([1,2,3], &(&1 * &1)) do func.(1) + mapsum([2,3], &(&1 * &1))
2mapsum([2,3], &(&1 * &1)) do func.(1) + func.(2) + mapsum([3], &(&1 * &1))
3mapsum([3], &(&1 * &1)) do func.(1) + func.(2) + func.(3) + mapsum([], &(&1 * &1))
4mapsum([], &(&1 * &1)) do func.(1) + func.(2) + func.(3) + 0
つぎにfunc.(head)
の部分をiex
で試してみましょう。&(&1 * &1)
は1つの引数をとり、その自乗を返します。
iex
1iex> func = &(&1 * &1)
2iex> func.(1)
31
4iex> func.(2)
54
6iex> func.(3)
79
先ほどの処理の流れ図に戻ってfunc.(X)
の答えを書き加えれば完成です。
elixir
1mapsum([1,2,3], &(&1 * &1)) do func.(1) + mapsum([2,3], &(&1 * &1))
2 1 + mapsum([2,3], &(&1 * &1))
3mapsum([2,3], &(&1 * &1)) do 1 + func.(2) + mapsum([3], &(&1 * &1))
4 1 + 4 + mapsum([3], &(&1 * &1))
5mapsum([3], &(&1 * &1)) do 1 + 4 + func.(3) + mapsum([], &(&1 * &1))
6 1 + 4 + 9 + mapsum([], &(&1 * &1))
7mapsum([], &(&1 * &1)) do 1 + 4 + 9 + 0
8
9= 14
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/10 14:45