如何将评估结果添加到二维列表

问题描述 投票:0回答:2

我正在尝试创建一个球体顶点的 3d 坐标列表,从 ((0 0 1) ...) 开始,如下所示:

(defvar spherelatamount 7)
(defvar spherelonamount 8)
(defparameter sphereverticeslist (make-list (+ 2 (* (- spherelatamount 2) spherelonamount))))
(setf (elt sphereverticeslist 0) '(0 0 1))

尝试添加下一点

(setf (elt sphereverticeslist 1) '(0 (sin (/ pi 6)) (cos (/ pi 6))))

这给出了结果

((0 0 1) (sin (/ pi 6)) (cos (/ pi 6)) ...)

当我需要时:

((0 0 1) (0 0.5 0.866) ...)

即评估正弦和余弦。我该如何实现这一目标?谢谢。

写道:

(defvar spherelatamount 7)
(defvar spherelonamount 8)
(defparameter sphereverticeslist (make-list (+ 2 (* (- spherelatamount 2) spherelonamount))))
(setf (elt sphereverticeslist 0) '(0 0 1))
(setf (elt sphereverticeslist 1) '(0 (sin (/ pi 6)) (cos (/ pi 6))))

期待:

((0 0 1) (0 0.5 0.866) ...) 
list lisp vertices clisp slime
2个回答
0
投票

引用列表可以防止对列表中的所有内容进行求值,因此您只需插入文字值。

调用

list
创建包含评估值的列表。

(setf (elt sphereverticeslist 1) (list 0 (sin (/ pi 6)) (cos (/ pi 6))))

如果您混合使用文字值和计算值,则可以使用反引号/逗号。

(setf (elt sphereverticeslist 1) `(0 ,(sin (/ pi 6)) ,(cos (/ pi 6))))

0
投票

您需要评估通话:

(defvar spherelonamount 8)
(defparameter sphereverticeslist (make-list (+ 2 (* (- spherelatamount 2) spherelonamount))))
(setf (elt sphereverticeslist 0) '(0 0 1))
(setf (elt sphereverticeslist 1) `(0 ,(sin (/ pi 6)) ,(cos (/ pi 6))))
© www.soinside.com 2019 - 2024. All rights reserved.