![](/img/trans.png)
[英]how to write a scheme program consumes n and sum as parameters, and show all the numbers(from 1 to n) that could sum the sum?
[英]Scheme - Finding the sum of fractions from -n to n
因此,我必須制作一個名為frac-sum的函數,將兩個函數從-n到n的分數之和作為f(n)/ g(n)作為分數,並將從-n到n的總和作為f( -n)/ g(-n)+ ... f(n)/ g(n)
它采用三個形式參數fg和n。
到目前為止,我已經可以正常運行了,但是最終卻陷入了遞歸循環,這意味着我的基本情況有問題:
(define (negn n) (- (* n -1) 1))
(negn 1)
(define (frac-sum f g n)
(cond ((= n (negn n)) 0)
((= (g n) 0) (+ 0 (frac-sum f g (- n 1))))
((+ (/ (f n) (g n)) (frac-sum f g (- n 1))))))
我用它來測試它應該輸出兩個:
(分數總和(lambda(x)(-x 1))(lambda(x)x)1)
沒有整數n
,語句n = (n * -1) - 1
會成立。 這是函數無限循環的原因。
由於要在[-n, n]
范圍內進行迭代,因此可以在函數中定義兩個值,然后遞歸增大下限或減小上限。 然后可以通過測試下限是否等於上限來終止該函數。
(define (frac-sum f g n)
(let loop ((neg (- n)) (pos n) (acc 0))
(cond
((= neg pos) acc)
((zero? (g neg))
(loop (add1 neg) pos acc))
(else
(loop (add1 neg) pos (+ (/ (f neg) (g neg)) acc))))))
例如:
(frac-sum (lambda (x) (- x 1)) (lambda (x) x) 1)
=> 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.