小编Ant*_*nko的帖子

参考cons细胞

如何设置变量以指向列表单元格?

我正在尝试编写一个宏来将列表中的所有值乘以一个值.这就是我目前拥有的:

(defmacro scale (areas scale)
  `(dotimes (n (list-length ,areas))
     (setf (nth n ,areas) (* (nth n ,areas) ,scale)))) 
Run Code Online (Sandbox Code Playgroud)

我担心这不是最有效的做事方式,因为我两次查看第n个细胞.我宁愿设置一个变量来指向第n个单元格,这样setf可以修改该单元格的值,并*可以在其计算中使用该单元格的值.

更好的方法是使用dolist并将变量设置为单元格引用.这是可能吗?

虽然我在这里,当你有一个单元格时,是否也可以在列表中获取下一个单元格.有点像迭代器,这样我可以做类似的事情:

(let ((area (car areas))
  (loop while area do
    (setf area (* area scale))
    (setf area (next area))))
Run Code Online (Sandbox Code Playgroud)

但我不知道如何区分设置指针或设置引用单元格的值.

我希望我有道理:)

lisp reference common-lisp cons

2
推荐指数
1
解决办法
141
查看次数

SIMD:翻转四个打包整数的符号

假设我有四个打包的整数.

__m128i val = _mm_set_epi32(42,64,123,456);
Run Code Online (Sandbox Code Playgroud)

在val中翻转四个整数的符号(乘以-1)的最快方法是什么?

c++ simd

1
推荐指数
1
解决办法
383
查看次数

标签 统计

c++ ×1

common-lisp ×1

cons ×1

lisp ×1

reference ×1

simd ×1