SICP 练习 1.11 中的球拍错误

Errors in Racket for SICP Exercise 1.11

Racket 的解释器给我错误

我试图实现递归

练习 1.11 的函数:

#lang sicp

(define (f n)
  (cond ((< n 3) n)
        (else (+ f((- n 1)) 
                 (* 2 f((- n 2))) 
                 (* 3 f((- n 3)))))))

(f 2)
(f 5)

Racket 解释器给出的错误是:

 2
 application: not a procedure;
 expected a procedure that can be applied to arguments
 given: 4
 arguments...: [none]
 context...:

/Users/tanveersalim/Desktop/Git/EPI/EPI/Functional/SICP/chapter_1/exercise_1-11.rkt: [运行 正文]

正如其他人指出的那样,您 f 的调用不正确

f((- n 1))(和其他类似实例)更改为 (f (- n 1))

(define (f n)
  (cond ((< n 3) n)
        (else (+ (f (- n 1)) 
                 (* 2 (f (- n 2))) 
                 (* 3 (f (- n 3)))))))

(f 2) ; 2
(f 5) ; 25