条件分支的递归调用

时间:2016-12-16 21:01:49

标签: recursion scheme r5rs

我开始掌握Lisp,我正试图用Leibniz公式编写一个近似pi的程序;我想我已经接近了,但我不知道该怎么办。目前的行为是它首先正确计算,但程序终止并显示数字' 1'。我不确定我是否可以像这样递归地调用已定义的函数,

;;; R5RS
(define (pi-get n)
  (pi 0 1 n 0))

(define (pi sum a n count)
  ;;; if n == 0, 0
  (if (= n 0) 0)
  ;;; if count % 2 == 1, + ... else -, if count == n, sum
  (cond ((< count n)
         (cond ((= (modulo count 2) 1)
                (pi (+ sum (pi-calc (+ 2 a))) (+ a 2) n (+ count 1)))
               (pi
                (- sum (pi-calc (+ 2 a))) (+ a 2) n (+ count 1))))))

(define (pi-calc a)
  (/ 1.0 a))

道歉,如果这有点难以理解,我现在只是学习Lisp几个星期,而且我不确定这种语言的正常格式是什么。我已经添加了一些评论,希望有所帮助。

1 个答案:

答案 0 :(得分:0)

正如Sylwester所说,结果证明我的语法错误。

;;; R5RS
(define (pi-get n)
 (pi 1 1 n 0))

(define (pi sum a n count)
(if (= n 0) 0)
(cond ((< count n)
     (cond ((= (modulo count 2) 1)
            (pi (+ sum (pi-calc (+ 2 a))) (+ a 2) n (+ count 1)))
           ((= (modulo count 2) 0)
            (pi (- sum (pi-calc (+ 2 a))) (+ a 2) n (+ count 1))))
(display (* 4 sum)) (newline))))

(define (pi-calc a)
 (/ 1.0 a))