为什么我的过程的参数出现“不是函数”错误?

时间:2019-02-06 05:07:50

标签: function syntax compiler-errors functional-programming scheme

我正在阅读《方案的计算机编程的结构和解释》 ,该书使用Scheme,而我仅涉及了递归的一部分。我编写了一个练习1.11的程序:

函数f由以下规则定义:如果n <3并且f(n)= f(n-1)+ 2f(n-2)+ 3f(n-3),则f(n)= n ),如果n> 3.编写一个通过递归过程计算f的过程。编写一个通过迭代过程计算f的过程。

我在repl.it处编写了代码,当我使用输入2运行程序时,出现了错误:Error: 2 is not a function [fRecurse, (anon)]。有人可以向我解释这是什么意思,我该如何解决?为什么期望我的输入是函数?

代码:

(define (fRecurse n)(
(cond ((< n 3) n)
      ((>= n 3) 
        (+ (procRecurse (- n 1))
           (* 2 (f (- fRecurse 2)))
           (* 3 (f (- fRecurse 3))))))))
(fRecurse 2)

1 个答案:

答案 0 :(得分:2)

该错误是由于(cond...)前有一对多余的括号引起的。要解决此问题,我们只需删除多余的一对括号即可:

(define (fRecurse n)
  (cond ((< n 3) n)
      ((>= n 3) 
        (+ (fRecurse (- n 1))
           (* 2 (fRecurse (- n 2)))
           (* 3 (fRecurse (- n 3)))))))

(fRecurse 2)

我对您的示例进行了一些其他修复,以使其正常运行:

  • f更改为fRecurse
  • procRecurse更改为fRecurse
  • (* 2 (f (- fRecurse 2)))更改为(* 2 (fRecurse (- n 2)))
  • (* 3 (f (- fRecurse 3)))更改为(* 3 (fRecurse (- n 3)))

查看更新后的repl.it