我必須做一個函數,我必須計算列表中不是原始程序的數量。 下面是一些例子: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