Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Chap07/ListsAndRecursion-00.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
defmodule MyList do
def sum(list), do: _sum(list)

defp _sum([]), do: 0
defp _sum([head | tail]), do: head + _sum(tail)
end
8 changes: 8 additions & 0 deletions Chap07/ListsAndRecursion-01.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
defmodule MyList do
def mapsum(list, func), do: _mapsum(list, func)

defp _mapsum([], _func), do: 0
defp _mapsum([head | tail], func) do
func.(head) + _mapsum(tail, func)
end
end
25 changes: 25 additions & 0 deletions Chap07/ListsAndRecursion-02.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
defmodule MyList do
def max(list), do: _max(list, -1)

defp _max([], value), do: value
defp _max([head | tail], value) when head > value do
_max(tail, head)
end
defp _max([head | tail], value) when head <= value do
_max(tail, value)
Comment on lines +5 to +9
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

第12章先取りになっちゃうけど,ガードでやるかcaseでやるかifでやるかは諸説あるので,別の書き方もあるって感じで書いときます
ただ,ページエラーの404とか分けるときはcaseが良さそうみたいなのを聞きました.

defp _max([head | tail], value) do
  case head > valuse do
    true -> _max(tail, head)
    false -> _max(tail, value)
  end
end

defp _max([head | tail], value) do
  if head > value do
    _max(tail, head)
  else
    _max(tail, value)
  end
end

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なるほど。
if は第10章で出てきてることを確認しました。
case, if 共に出てきたときにぜひ、それぞれの利点をお聞きしたいです。

end
end

# defmodule MyList do
# def max(list), do: _max(list)

# defp _max([head | []]), do: head
# defp _max([head | tail]) when head > _max(tail) do
# _max(tail)
# head
# end
# defp _max([head | tail], value) when head <= _max(tail) do
# _max(tail)
# value
# end
# end
9 changes: 9 additions & 0 deletions Chap07/ListsAndRecursion-03.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
defmodule MyList do
def caesar(list, n), do: _caesar(list, n)

defp _caesar([], n), do: []
defp _caesar([head | tail], n) do
[a, z] = 'az'
[rem(head-a+n, z-a+1)+a | _caesar(tail, n)]
end
end
13 changes: 13 additions & 0 deletions Chap07/ListsAndRecursion-04.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
defmodule MyList do
def span(from, to), do: _span(from, to)

defp _span(from, to) when from == to do
[to]
end
defp _span(from, to) when from < to do
[from | _span(from+1, to)]
end
defp _span(from, to) when from > to do
[from | _span(from-1, to)]
end
end
13 changes: 13 additions & 0 deletions Chap07/mylist.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
defmodule MyList do
def len([]), do: 0
def len([_head | tail]), do: 1 + len(tail)

def square([]), do: []
def square([head | tail]), do: [head*head | square(tail)]

def add_1([]), do: []
def add_1([head | tail]), do: [head+1 | add_1(tail)]

def map([], _func), do: []
def map([head | tail], func), do: [func.(head) | map(tail, func)]
end
7 changes: 7 additions & 0 deletions Chap07/sum.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
defmodule MyList do
def sum(list), do: _sum(list, 0)

# プライベート関数
defp _sum([], total), do: total
defp _sum([head | tail], total), do: _sum(tail, head+total)
end