我必须做一个函数,我必须计算列表中不是原始程序的数量。 下面是一些例子:SCHEME - 不是原始的程序数
(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)))'' – Sylwester 2014-10-02 09:48:59