xiaoxuefengwu 发表于 2011-3-5 19:30:06

[求助] 如何用foreach 修改list表中的某个数据

如何用foreach 修改list表中的某个数据
如我想对表s'(1 2 3 ) 修改为 '(2 3 4 ) 或其他

//用简单的代码调试了一下,这样并未改变s表的数据。
(defun c:jj ()
(setq s (list 1 2 3))
(foreach n s (setq n (+ n 1)))
(foreach n s (print n))
(princ "\n")
)

谢谢

usercoolbo 发表于 2011-3-5 20:24:33

哈哈,这样当然不行了,你没更新,简单的MAPCAR,复杂的SETQ,赋值找对对像,呵呵

xiaoxuefengwu 发表于 2011-3-5 20:45:04

好像,很难接收,数据类型都不一样。一个是表s,一个是原子n

xiaoxuefengwu 发表于 2011-3-5 20:48:19

我用Subst函数 试一下,可是所有都替换。

xiaoxuefengwu 发表于 2011-3-5 20:49:27

有没有只对会后一个原子替换的
例如'(1 2 3 )替换为'(1 2 5 )的。

yshf 发表于 2011-3-5 20:54:32

命令: (setq a '(1 2 3))
(1 2 3)

命令: (setq b (subst 5 (last a) a))
(1 2 5)

ZZXXQQ 发表于 2011-3-5 20:55:57

(defun c:jj ()
(setq s (list 1 2 3))
(setq lst (list))
(foreach n s (setq list (append lst (list (1+ n )))))
(foreach n lst (print n))
(princ "\n")
)

ZZXXQQ 发表于 2011-3-5 20:56:15

(defun c:jj ()
(setq s (list 1 2 3))
(setq lst (list))
(foreach n s (setq list (append lst (list (1+ n )))))
(foreach n lst (print n))
(princ "\n")
)

xiaoxuefengwu 发表于 2011-3-5 21:05:50

yshf的方法,如果
(setq a '(1 2 2))
setq b (subst 5 (last a) a))

(1 5 5),我想要(1 2 5),

这样的buger发生的概率很大的

yshf 发表于 2011-3-5 22:46:47

(setq a '(1 2 2))
(setq b (reverse (cons 5 (cdr (reverse a)))))
页: [1] 2
查看完整版本: [求助] 如何用foreach 修改list表中的某个数据