请帮忙
大家好我有这样一个列表:
((SPT01 0.11 1.15)(1/35 3/33 4/31 1 18 7/31)((SPT02 0.15 1.1)(1/34 3/30 4/31 2 14 7/22)((SPT03 0.25 2.44)(1/54 3/74 4/34 1 20 7/744)))
我需要一个函数来返回:
(((“SPT01”“0.11”“1.15”)(“1/35”“3/33”“4/31”“1”“18”“7/31”)((“SPT02”“0.15”“1.18”)(“1/34”“3/30”“4/31”“2”“14”“7/22”)((“SPT03”“0.25”“2.44”)(“1/54”“3/74”“4/34”“1”“20”“7/744”))
怎么做? 不知道你是怎么得到SPT01的,因为(列出SPT01 0.11 1.15)根据你的帖子返回(零0.11 1.15)(列出“SPT01”0.11 1.15),无论如何RTOS是你的朋友。你做了第N个。SPT01是变量名吗?
; ignoring nested list for moment
(setq s (list "SPT01" 0.11 1.15))
(subst (rtos (nth 1 s) 2 2)(nth 1 s) s)
(subst (rtos (nth 2 s) 2 2)(nth 2 s) s)
; returns !s
("SPT01" "0.11" "1.15")
;nested nth's
(nth 0 lst) = ((SPT01 0.11 1.15) (1/35 3/33 4/31 1 18 7/31))
(nth 0 (nth 0 lst))=(SPT01 0.11 1.15)
(nth 1 (nth 0 (nth 0 lst)))=0.11
这可能有助于:-
(defun foo (x)
(mapcar '(lambda (y)
(mapcar '(lambda (z)
(mapcar 'vl-princ-to-string z)
)
y
)
)
x
)
)
哇!由于我使用了两个非AutoCAD软件包,我已经很长时间没有使用VLISP了,但昨晚我处理了一段时间这个问题,结果并不令人满意。你简单高效的代码解决了OP的问题,让我对使用正确的工具可以做什么有了新的认识。
谢谢你还强迫我面对我的地图车/λ恐惧,萨蒂什!
BKT公司 这里有一个递归解决方案,允许任何深度的列表嵌套:
例如:
不过,我想问一下,你首先是如何获得这样一个列表的,因为很可能有一种方法可以避免这种转换。
还要注意,以这种方式转换双精度时,您将失去数值精度:
5
Visual lisp使编码更加简单,可以实现比autolisp更多的功能。即使我在开始的时候遇到了mapcar的问题,但是继续练习。。。
注意,先生
页:
[1]