【发布时间】:2014-10-02 04:28:40
【问题描述】:
我必须创建一个函数来计算列表中非原始过程的数量。 以下是一些示例:
(nprocs '(+ (cuadrado 1) (* 2 (inc1 3)))) => 0
(nprocs (+ (cuadrado 1) (* 2 (inc1 3)))) => ERROR
(nprocs (list + (list cuadrado 1) (list * 2 (list inc1 3)))) => 2
我试过了:
(define (cuadrado x) (* x x))
(define inc1 (lambda (x) (+ x 1)))
(define nprocs
(lambda (fun)
(if (list? fun)
(if(procedure? (car fun))
(+ 1 (nprocs (cdr fun)))
(nprocs (cdr fun)))
0)
)
)
此代码不起作用,希望有人能提供帮助。 提前致谢!
【问题讨论】:
-
第一个是带引号的列表,所以
+和*是符号而不是过程。第二个您尝试评估表达式并将结果传递给nprocs,而最后一个示例使用list,以便可以将+和其他符号评估为过程。只有最后一个是正确的。或者,您可以使用`(,+ (,curado 1) (,* 2 (,inc1 3)))
标签: list scheme procedure primitive