«а» и хвостовая рекурсия - PullRequest
2 голосов
/ 04 января 2011

Можно ли построить итеративный процесс с помощью рекурсивного вызова в операторе and?

Например, у нас есть функция foo, которая ничего не делает. Какой процесс он создаст (итеративный или рекурсивный)?

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

Ответы [ 2 ]

4 голосов
/ 04 января 2011

Ради Ламбертса давайте расширим синтаксис.

(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
4 голосов
/ 04 января 2011

Да, and в порядке - вы можете прочитать это в стандарте .

...