-2
我開始接觸Lisp,我正在嘗試使用萊布尼茲公式來編寫一個近似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現在幾個星期,我不知道是什麼標準格式化會爲語言。我已經添加了一些評論,希望有所幫助。
'if'與'cond'沒有任何關係。你的'cond'的括號太少,而且在你的原始文章中,你忽略了那些以未定義值而不是答案結尾的情況。特別是打印到底是什麼使得返回值總是未定義的。 – Sylwester
這很奇怪,因爲球拍沒有給我一個語法錯誤,但仍然沒有。此外,我相信我現在明白,如果我想要返回實際值,我應該定義總和。 – I2obiN
這是有效的,因爲最後一個「pi」周圍的括號成爲了術語,而不是調用它將過程作爲謂詞進行評估的過程,並且參數變成了隨後的表達式。沒有語法錯誤,但幾乎沒有意圖。看看我如何格式化你的原始代碼。 – Sylwester