怎么将多级表用函数按先后顺序转为一级表
有谁知道怎么将表'(1 2 (3 4 (5 "6")))变成表'(1 2 3 4 5 "6")(defun onelst (lst1 / lst)
(foreach a lst1
(if (listp a)
(setq lst(append (onelst a) lst))
(setq lst(cons a lst))
)
)
)
(princ(reverse (onelst '(1 2 (3 4 (5 "6")))))) xvjiex 发表于 2020-12-11 14:47
(defun onelst (lst1 / lst)
(foreach a lst1
(if (listp a)
感谢!我研究下 本帖最后由 wzg356 于 2020-12-11 19:15 编辑
沙发可改为
(defun onelst1 (lst1 / lst)
(foreach a lst1
(if (listp a)
(setq lst(append lst (onelst a)))
(setq lst(append lst(list a)))
)
)
)
;(onelst1 '(1 2 (3 4 (5 "6")))) wzg356 发表于 2020-12-11 19:12
沙发可改为
(defun onelst1 (lst1 / lst)
append比较容易理解和使用,就是速度慢,尽量使用 cons。 wzg356 发表于 2020-12-11 19:12
沙发可改为
(defun onelst1 (lst1 / lst)
好的,数据处理不多用APPEND好点,数据多用cons xvjiex 发表于 2020-12-11 20:19
append比较容易理解和使用,就是速度慢,尽量使用 cons。
嗯呢 是的,我改为了APPEND 没关系啊,也可把沙发合并成一个函数,结果更直观,直接是要的结果 (listp a)
改为
(and a (listp a))
测试
(onelst '(1 2 nil (3 4 (5 "6"))))
正确返回
(1 2 nil 3 4 5 "6")
页:
[1]