在以下代码中的这一行((pointerp (first args)) (mem-aref (%vector-float-to-c-array (first args)) :float (second args)))
上,(second args)
会使用警告This is not a number NIL
进行编译。该功能有效,但如何使用Lisp以独立于implimentation的方式摆脱此警告。解决方案需要非常快。代码需要很长时间才能正确运行并且运行良好,因此我无法真正改变它的运行。你不会认识到的功能实际上并不重要,因此要提前告知你的消息......提前感谢您的帮助。
(defun vector-float (&rest args)
(cond ((eq (first args) nil) (return-from vector-float (%vector-float)))
((listp (first args))
(c-arr-to-vector-float (first args)))
((symbolp (cadr args)) (%vector-float-size (first args)))
((pointerp (first args)) (mem-aref (%vector-float-to-c-array (first args)) :float (second args)))
(t nil)))
答案 0 :(得分:1)
如果(second args)
为NIL
,则args
没有second
或second
为NIL
。但是,mem-aref
的第三个参数必须是一个数字,因为它是一个索引。这就是问题所在。
如果您的计划(second args)
被允许NIL
(或不存在),那么您必须测试这种可能性并避免将NIL
传递给{{1 (可能省略了那个可选参数)。如果mem-aref
不允许为(second args)
,那么该错误就会出现在程序的其他位置。
E.g。 (另),
NIL