为什么我在Elisp索引列表时遇到问题?

时间:2017-10-26 06:08:18

标签: lisp elisp

我一直在玩ELisp,并在我的代码中又出现了一个奇怪的错误

我得到的错误是:

  Debugger entered--Lisp error: (error "Bad bounding indices: 2, 3")
  signal(error ("Bad bounding indices: 2, 3"))
  error("%s" "Bad bounding indices: 2, 3")
  subseq((quote (2 2 2 2)) 2 3)
  (matrix-from-values 1 number-of-columns-on-output (subseq (nth 2 matrix) (+ (* row-index number-of-columns-on-input) start-column) (+ (* row-index number-of-columns-on-input) end-column)))
  (let ((number-of-columns-on-input (nth 1 matrix)) (number-of-columns-on-output (- end-column start-column)) (row-index (- row 1))) (matrix-from-values 1 number-of-columns-on-output (subseq (nth 2 matrix) (+ (* row-index number-of-columns-on-input) start-column) (+ (* row-index number-of-columns-on-input) end-column))))
  matrix-extract-subrow((2 2 (quote (2 2 2 2))) 1 2 3)
  [..more stuff..]

我可能没有正确地阅读错误,但正如我所理解的那样,解释器会评估我的功能("(矩阵... [blah-blah]"事情)从里到外,绊倒:

  subseq((quote (2 2 2 2)) 2 3)

但是,如果我进入* scratch *缓冲区并运行:

(subseq (quote (2 2 2 2)) 2 3)

运行得很好

2 个答案:

答案 0 :(得分:1)

您会混淆表达式。在源代码中编写表达式,而在上面的调试器输出中,您可以看到值。 eval接受一个表达式并返回相应的值,而quote可以用来获取一个值并将其转换回一个只返回该值的(普通)表达式。

因此,当您看到subseq((quote (2 2 2 2)) 2 3)时,表示subseq的值为(quote (2 2 2 2)),您可以通过评估(quote (quote (2 2 2 2)))这样的表达式获得该值。

你剥夺了其余的回溯,但是看着

matrix-extract-subrow((2 2 (quote (2 2 2 2))) 1 2 3)

似乎你可能有类似

的地方
... '(2 2 '(2 2 2 2)) ...

应该是

... '(2 2 (2 2 2 2)) ..

代替。

答案 1 :(得分:0)

我认为你在某个地方有一个额外的引用层。如果我评估

,我可以重现你的错误
(subseq (quote (quote (2 2 2 2))) 2 3)

如果没有看到您正在运行的实际elisp代码,以及在错误时如何调用它,则很难更具体。