有没有人使用过网络ide replit? http://repl.it/languages/Scheme
你如何增加它?
我正在尝试封装一个函数来根据sicp视频2a进行总结。
(define (square a )
(* a a))
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a ) next b))))
(define (sum-int a b)
(define (identity a) a)
(sum identity a (+ 1 a) b))
(define (sum-square a b)
(sum square a (+1 ) b))
(sum-square 1 2)
备用和方(不工作)
(define (sum-square a b)
(sum square a (+ 1 a) b))
(sum-square 1 2) // getting 2 not a function.
工作代码:
(define (sum-int a b)
(define (identity a) a)
(sum identity a (lambda(a)(+ 1 a)) b))
答案 0 :(得分:2)
您必须将函数作为next
参数传递,如下所示:
(define (identity n) n)
(define (sum-int a b)
(sum identity a add1 b))
(define (sum-square a b)
(sum square a add1 b))
如果add1
未定义,您可以编写自己的版本:
(define (add1 n)
(+ 1 n))
或者,您可以直接传递lambda
:
(define (sum-int a b)
(sum identity a (lambda (n) (+ 1 n)) b))
(define (sum-square a b)
(sum square a (lambda (n) (+ 1 n)) b))