, 이진 검색 트리에서 요소를 삭제하는 함수의 정의의 일부를 같은 매개 변수가있는 함수를 호출 :ghci 컴파일러 최적화 : 두 번 아래의 간단한 코드에서
deleteB x (Node n l r) | x == n = Node (leastB r) l (deleteB (leastB r) r)
는 컴파일러가 코드를 최적화하지 그래서 그것이 한 번만 호출하는 것처럼 (최소 B r) :
deleteB x (Node n l r) | x == n = Node k l (deleteB k r)
where k = leastB r
?
즉, 매개 변수 r이 함수 deleteB의 본문 내에서 변경되지 않았기 때문에 동일한 함수 (leastB)를 호출 한 결과가 다른 결과를 줄 수 없다는 것을 컴파일러에서 이해할 수 있습니까? 따라서 두 번 계산하는 것은 쓸모가 없다?
더 일반적으로 컴파일러가이 최적화를 수행하는지 또는 놀라운 stackoverflow가 존재하지 않는지에 대해 이해할 수 있습니까? 덕분에
GHC가이 작업을 수행하지 않습니다. http://www.haskell.org/haskellwiki/GHC/FAQ#Does_GHC_do_common_subexpression_elimination.3F – user2407038