exercism / exercism/elixir-analyzer

`dna-encoding` doesn't detect tail-recursion within a `case` expression

Đang mở
#410 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Elixir
Star
33
Fork
33
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

Based on my understanding, it seems that using a `case` expression for pattern matching, rather than a function head, prevents the automated analyzer from detecting tail recursion.

From what I've read, using a single function head with at top-level `case` expression for pattern matching should result in essentially the same thing as using multiple function heads, once they are compiled. If that's correct, then it seems the analyzer should be able to detect tail recursion in the `case` expression variant shown (commented out) below.

It's also possible that there's a gap in my understanding and having the recursive call "wrapped" in a `case` expression results in a solution that isn't tail-recursive. 😄

```elixir
def encode(dna) do
_encode(dna, <<>>)
end

# The analyzer says this function IS NOT tail recursive
# defp _encode(dna, acc) do
# case dna do
# [] -> acc
# [c | rest] -> _encode(rest, <>)
# end
# end

# The analyzer says this function IS tail recursive
defp _encode([], acc), do: acc
defp _encode([c | rest], acc), do: _encode(rest, <>)
```

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.