【问题标题】:Lisp unbound symbolLisp 未绑定符号
【发布时间】:2016-12-07 22:07:29
【问题描述】:

我正在学习 lisp,我正在尝试创建简单的函数来对 arr 求和。

(defun sum( N )
    ( if ( null N )
         nil
         ( + (car N ) ( sum ( cdr N )))))

(sum '(1 2 3 ))

但它会引发错误

错误:执行:未绑定符号:“N”[]

括号应该是正确的。为什么这会引发错误或我的代码背后的逻辑有什么问题?

如果列表为空,它将返回 nil ,如果不是,它将递归返回第一个元素 + 列表的其余部分。

感谢您的帮助

【问题讨论】:

  • 投票关闭它,因为错误消息似乎来自错误的解释器,并且与代码没有直接关系。我也不认为这个问题和提供的答案可以帮助未来的 SOU
  • 即使问题是由于“糟糕”的解释器造成的,其他人也可能会遇到相同的解释器。他们不会觉得这个问题有帮助吗?
  • "如果列表为空则返回nil,否则返回第一个元素+ 总和 其余元素递归列表。” 总是尝试简单的情况,看看发生了什么。 () --> NIL; (1) --> 1 + sum() = 1 + NIL.

标签: lisp common-lisp


【解决方案1】:

基本情况不正确,您正在添加列表中的数字,因此您无法返回nil,当您尝试向其中添加数字时它会失败。试试这个:

(defun sum (N)
  (if (null N)
      0
      (+ (car N) (sum (cdr N)))))

【讨论】:

  • @Johnyb 这对我有用:(sum '(1 2 3)) ...你确定你没有传递一个名为 N 的变量,它之前没有定义吗?
  • 不,我已修复错误,谢谢。我正在使用一些抛出 erros 的在线解释器,在 linux 上尝试过它并且它有效。
猜你喜欢
  • 2011-08-03
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多