【问题标题】:Why doesn't scheme allow you to call a function from within another function?为什么方案不允许您从另一个函数中调用一个函数?
【发布时间】:2016-05-14 22:32:57
【问题描述】:
(define function1 (lambda(val)
  (if (list? val) 
     (function2 (val))
     ('!list))))

当我尝试输入 '(t t t) 时,我收到以下错误:

application: not a procedure;
 expected a procedure that can be applied to arguments
  given: (t t t)
  arguments...: [none]

我已经定义了 function2,当我自己调用它时它可以工作,但我无法在 function1 中调用它。

【问题讨论】:

  • 我提交了一个编辑来清理您的代码示例,使其具有更好的 lisp-y 风格。我希望它被接受。我相信,使用更简洁的代码风格,你的语法错误实际上更容易被发现。
  • 请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Overflow 上发帖,您已根据CC BY-SA 3.0 license 授予 SO 分发该内容的不可撤销的权利。根据 SO 政策,任何破坏行为都将被撤销。如果您想了解更多关于删除帖子的信息,请查看How does deleting work?

标签: scheme lisp


【解决方案1】:

问题是val 不是一个函数。您应该将(function2(val)) 替换为(function2 val)

此外,'!list 也不是函数; if 表达式的 else 子句也需要修正。

【讨论】:

    【解决方案2】:

    '!listval 不是过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      相关资源
      最近更新 更多