【问题标题】:Why is the parameter for my procedure getting a 'not a function' error?为什么我的过程的参数出现“不是函数”错误?
【发布时间】:2019-06-30 00:16:52
【问题描述】:

我正在阅读 Structure and Interpretation of Computer Programming 这本书,它使用了 Scheme,我刚刚完成了关于递归的部分内容。我为练习 1.11 编写了一个程序:

函数 f 由以下规则定义: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)

【问题讨论】:

  • 这更像是一个语法问题,所以我认为“算法”标签在这里不合适。
  • @ElliottSmith 重新标记

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


【解决方案1】:

错误是由于(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

【讨论】:

  • 非常感谢,我什至没有意识到我犯了这么多错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 2020-10-16
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 2023-03-28
相关资源
最近更新 更多