【问题标题】:Unable to subtract from a number in LISP?无法从 LISP 中的数字中减去?
【发布时间】:2014-11-05 04:50:09
【问题描述】:

所以我正在实现一个函数,该函数在 LISP (Allegro mlisp) 中为一个项目获取列表的前 n 个元素,但我似乎无法弄清楚为什么我不能进行减法计算。我不断得到

我的这个方法的代码是,它在监听器中编译得很好

(defun get_upto (n cut_list)
(if (= n 0) cut_list 
    (cons (car cut_list) (get_upto ((- n 1) (cdr cut_list))))))

但如果我尝试执行

$: (get_upto 3 '(1 2 3 4 5))

我得到了错误

Error: Illegal function object: (- n 1)

我在这里做错了什么?我传入一个数字,检查 n = 0 没有问题。

【问题讨论】:

  • 在最后一行中有很多括号说明为什么它认为你想使用 (- n 1) 作为函数。
  • 您可能希望将退出语句更改为(= n 0) nil
  • Common Lisp 要求您正确填写括号。这与您可能习惯的其他语言不同。括号改变程序的含义。它们绝不是可选的或毫无意义的。

标签: function types lisp common-lisp


【解决方案1】:

你的括号太多了!

这是“从n中减去1,并将结果作为第一个参数传递给get_upto

(get_upto (- n 1) (cdr cut_list))

但你有这个:

(get_upto ((- n 1) (cdr cut_list)))

即“从 n 中减去 1,并将计算结果用作第一个参数为 (cdr cut_list) 的函数”

【讨论】:

  • 谢谢!就像 OCaml 一样,它在 LISP 中的小东西时不时地吸引着我!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
相关资源
最近更新 更多