2011-01-04 10 views
2

and 문에서 재귀 호출을 사용하여 반복 프로세스를 구축 할 수 있습니까?"및"및 꼬리 재귀

예를 들어, 목적, 우리는 아무 것도하지 않는 기능 foo을 가지고 있습니다. 어떤 종류의 프로세스를 만들지 (반복 또는 재귀)?

(define (foo? bar) 
    (if (< bar 0) true (and (> 10 1) (foo? (- bar 1))))) 
+0

마지막으로 호출하는 함수는'foo? '가 아니기 때문에'rec'입니다. – Gabe

+0

@Gabe :'and'는 구문이 아니라 프로 시저입니다. – leppie

+0

@leppie : 컴파일러가 처음부터 모든 것을 최적화하지 않는다고 가정 할 때, 어떻게 변경 될까요? – Mehrdad

답변

4

예, and 확인 - 당신이 standard이 읽을 수 있습니다.

+0

반복적 인 이유를 설명해 주시겠습니까? 재귀 호출이 함수의 마지막 연산이 아니기 때문에 그렇지 않다고 생각합니다. – Mehrdad

+1

+1 정답이라고 생각합니다. 표준 (게시물의 링크 별)'(및 * <꼬리표>) –

+0

흥미 롭습니다 ... +1, 동의하지는 않지만. 그러나 누군가 이유를 설명 할 수 있습니까? – Mehrdad

4

Lamberts 술의 경우 구문을 확장 할 수 있습니다.

(define (foo? bar) 
    (if (< bar 0) 
     #t ; tail position, but no call 
     (if (> 10 1) 
      (foo? (- bar 1)) ; tail position 
      #f))) ; tail position, but no call 
+0

고마워요. 프로세스가 명확 해집니다.) –

+1

그래, 시간을내어 작성해 주셔서 감사합니다! 분명히 일을 분명히합니다! :디 – Mehrdad

관련 문제