我一直在玩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)
运行得很好
答案 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代码,以及在错误时如何调用它,则很难更具体。