2010-06-05 2 views
7

일리노이 지침 .tail을보고 싶습니다. 그러나 필자가 작성한 꼬리 호출을 사용하는 간단한 재귀 함수는 루프에 최적화되어 있습니다. Reflector에서 루프가 어떻게 생겼는지 완전히 확신 할 수 없기 때문에 실제로 이것을 추측하고 있습니다. 나는 어떤 .tail opcode도 볼 수 없다. 내 프로젝트 속성에서 "꼬리 호출 생성"을 선택했습니다. 또한 Reflector에서 Debug 및 Release 빌드를 모두 시도했습니다..tail IL 명령어를 생성하는 간단한 F # 코드는 무엇입니까?

내가 사용하는 코드 페이지 190, Programming F# by Chris Smith에서이다 :

let factorial x = 
// Keep track of both x and an accumulator value (acc) 
let rec tailRecursiveFactorial x acc = 
    if x <= 1 then 
     acc 
    else 
     tailRecursiveFactorial (x - 1) (acc * x) 
tailRecursiveFactorial x 1 

사람이 참으로 .tail를 생성합니다 몇 가지 간단한 F # 코드를 제안 할 수 있습니다?

답변

6

상호 재귀 함수는해야

let rec even n = 
    if n = 0 then 
     true 
    else 
     odd (n-1) 
and odd n = 
    if n = 1 then 
     true 
    else 
     even (n-1) 

(현재 단지 그것을 시도하지 않은).

편집

또한보십시오

How do I know if a function is tail recursive in F#

+1

난 그냥 지금 확인했습니다. 예! .tail을 생성합니다. –