스칼라라는 언어의 컴파일러입니다.
리스트를 표현하는 방식이 List(1,2,3) 이면 이건 곧 1::2::3::Nil (Null과 같음) 으로 표현가능합니다
따라서 함수에서도 패턴매칭을 통해 재귀 함수로 표현하려고 하면
line 3 : case Nil => 스레드 덤프 예외
line 4 : case x :: xs => print(x) + function(xs)
으로 표현가능합니다. 보통 컴파일러 같으면 스택 프레임에서 호출한 횟수를 세줄거라고 생각하는데요
즉 예시에서 살펴보면 function(4), function(4), function(4), function(3) 이렇게 호출될 거라고 생각하는데 실제로는 function(line : 3)만 호출이 됩니다.
요즘 컴파일러가 똑똑한걸까요 -_-;