明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2696|回复: 13

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

  [复制链接]
发表于 2011-3-5 19:30 | 显示全部楼层 |阅读模式
如何用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")
)

谢谢
发表于 2011-3-5 20:24 | 显示全部楼层
哈哈,这样当然不行了,你没更新,简单的MAPCAR,复杂的SETQ,赋值找对对像,呵呵
 楼主| 发表于 2011-3-5 20:45 | 显示全部楼层
好像,很难接收,数据类型都不一样。一个是表s,一个是原子n

 楼主| 发表于 2011-3-5 20:48 | 显示全部楼层
我用Subst函数 试一下,可是所有都替换。

 楼主| 发表于 2011-3-5 20:49 | 显示全部楼层
有没有只对会后一个原子替换的
例如'(1 2 3 )替换为'(1 2 5 )的。

发表于 2011-3-5 20:54 | 显示全部楼层
命令: (setq a '(1 2 3))
(1 2 3)

命令: (setq b (subst 5 (last a) a))
(1 2 5)
发表于 2011-3-5 20:55 | 显示全部楼层
(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")
)

发表于 2011-3-5 20:56 | 显示全部楼层
(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")
)

 楼主| 发表于 2011-3-5 21:05 | 显示全部楼层
yshf的方法,如果
(setq a '(1 2 2))
setq b (subst 5 (last a) a))

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

这样的buger发生的概率很大的
发表于 2011-3-5 22:46 | 显示全部楼层
(setq a '(1 2 2))
(setq b (reverse (cons 5 (cdr (reverse a)))))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-5 11:23 , Processed in 0.324167 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表