这是代码,它的工作原理如下:
(let ((previous nil))
(defun vector-int (&optional arg i n (v (if (< n 5) :float :int)))
(cond ((and (pointerp arg) i n)
(unless (equal v (car previous))
(setf previous (cons v (v (if (< n 5) :float :int))))
(mem-aref (mem-aref (%vector-int-to-c-array arg) :pointer i) (cdr previous) n))
(t nil))))
%vector-int-to-c-array函数并不重要,但要运行它(来自上面的代码):
(mem-aref (mem-aref (%vector-int-to-c-array arg) :pointer i) :int n)
一百万次运行需要0.5秒。如果我运行vector-int
函数,则需要.68秒而没有(v (if (< n 5) :float :int))
参数和&#34;除非&#34;的表达。
但如上所述,100万次运行需要1.5秒。我需要n但是:如果n小于5则浮动:或者如果n是5或更大则是int。任何人都可以帮助我将这段代码的速度提高到不超过.68秒,运行100万次。唯一需要注意的是我需要保留cond声明。因为我将这段代码缩小到现在这里,我有其他条件在这部分加速之后添加,当我再次运行vector-int
时我必须能够更改n并自动计算更新后的数据。