scheme 尾递归示例

;;;tail recursion

;************************************************************

(define (fib n)

  (define (temp-fib a b n)

    (case n

      ((1) a)

      ((2) b)

      ((3) (+ a b))

      (else (temp-fib b (+ a b) (- n 1)))))

  (temp-fib 1 1 n))

;************************************************************

(define (f n) n)

(define (sum func n)

  (define (temp-sum func result n)

    (if (= n 0)

        result

        (temp-sum func (+ result (func n)) (- n 1))))

  (temp-sum func 0 n))


(define (product func n)

  (define (temp-product func result n)

    (if (= n 0)

        result

        (temp-product func (* result (func n)) (- n 1))))

  (temp-product func 1 n))

;************************************************************

(define (list-func func n)

  (define (temp-list-func func result n)

    (if (= n 0)

        result

        (temp-list-func func (cons (func n) result) (- n 1))))

  (temp-list-func func '() n))

;************************************************************

(define (Hannur n from to mid)

  (if (= n 0)

      "end"

      (begin (Hannur (- n 1) from mid to)

             (display n)

             (display " from ")

             (display from)

             (display " to ")

             (display to)

             (newline)

             (Hannur (- n 1) mid to from))))

;************************************************************


你可能感兴趣的:(Scheme,尾递归,汉诺塔)