패턴 매칭 도달 불가능 경고를 낼 수 있다는 것은
패턴 매칭을 최적화할 수 있다는 것임
예를 들어
f (x, []) = ...
f (x, y : ys) = ...
을 이렇게 바꿀 수 있다는 것임:
f a1 = case a1 of
___ (x, a2) → case a2 of
___ ___ [] → ...
___ ___ y : ys → ...
패턴 매칭 도달 불가능 경고를 낼 수 있다는 것은
패턴 매칭을 최적화할 수 있다는 것임
예를 들어
f (x, []) = ...
f (x, y : ys) = ...
을 이렇게 바꿀 수 있다는 것임:
f a1 = case a1 of
___ (x, a2) → case a2 of
___ ___ [] → ...
___ ___ y : ys → ...
아 그런데 f True = ...; f False = ...; 하고 f x = case x of True -> ...; False -> ...; 하고 경우에 따라 다를 수도 있음.
ㄹㅇ??
자세히 좀 알려주세요
잠만.. 정확한 예제가 생각이 안나는데 대충 where 구문 스코프가 달라져서 생기는 거임
아 ...
예를들어서 where안에서 정의된 value를 메모이제이션 할때 쓸 수 있는데, 함수를 쪼개서 정의하면 매번 이 값을 다시 계산함
ㅈㅁ 링크 찾아봄
네 뭔 말인지 알겠어요
아 링크는 못찾았는데, 대충 이런거임. fib n = fibs !! n where fibs = 0 : scanl (+) 1 fibs 이거랑 fib = (fibs !!) where fibs = 0 : scanl (+) 1 fibs 이거랑 다름
전자는 각 n에 대해서 fibs가 정의되고, 후자는 인자에 상관 없이 fibs가 한개만 정의됨. 그래서 아마 똑같은 함수 두번 호출하면 후자가 더 효율적이라고 들었던것 같다.
그래서 아마 님 예제같은 경우도 주의할 필요가 있을것 같은데.. 확실하진 않음
full-laziness를 달성하면 똑같아지는데요. implementing functional languages: a tutorial 6장 6절에 나와있어요.
헉 정말? 책을 안읽어서 잘 모르겠다..
이 상황이 아닌가?? 저도 잘 모르겠어요. 죄송해요.
implementing functional languages: a tutorial 이거 읽으면 G-machine 만들 수 있으니까 꼭 읽어보세요
땡큐. 책 다운 받음. 근데 안 읽고 쌓아둔 pdf가 너무 많아 ㅋㅋㅋㅋ
https://gall.dcinside.com/mgallery/board/view/?id=github&no=3566&page=1