chen4 发表于 2005-1-9 14:43:00

矩阵表如何修改其中一个数据

有一个类似于矩阵的表(mXn)<BR>(<BR>        (1 2 3 4 5 6 7 8 9 10 11 12)<BR>        (13 14 15 16 17 18 19 20 21 22 23 24)<BR>        (25 26 27 28 29 30 31 32 33 34 35 36)<BR>        (37 38 39 40 41 42 43 44 45 46 47 48)<BR>        (49 50 51 52 53 54 55 56 57 58 59 60)<BR>        (61 62 63 64 65 66 67 68 69 70 71 72)<BR>        (73 74 75 76 77 78 79 80 81 82 83 84)<BR>)


现在要修改第I行第J列的一个数据,有不有快速的方法。

xstlf 发表于 2005-1-9 14:59:00

首先找出第i行。然后再找出第j例,然后再送回到i.然后再送回到表。若当满足了你的条件的话,顺便把。j的值改为你想要的,当不满足条件就原封不动送回表中。这样就不会改变表中的数据排例了,不知能不能达到你的要求。

无痕 发表于 2005-1-10 20:47:00

subst + nth

chen4 发表于 2005-1-10 21:23:00

_$       (setq lst3 (cons "One" lst2 ))       


("One" 1.0 "One" 1 "One")


subst 函数可以用新项替换表中出现某个项。如下代码将用字符串“one”替换表中所有的字符串“One”。


_$       (setq lst4 (subst "one" "One" lst3))       


("one" 1.0 "one" 1 "one")


按帮助文件试验,假如矩阵表中有两个相同数据的项则会一同被替换。


现在我的笨办法是先公为点对表,然后再用assoc搜索替换某一项数据,最大再将点对表还原为矩阵表,方法似乎太笨,(当然效果可以达到),现在是想寻找新的方法和最优的钥匙。

meflying 发表于 2005-1-11 08:34:00

我觉得只能是全部循环一次,依次写到另一个表,碰到要修改的项,就将新数据写到新表里,其余则从旧表取出写如新表。。。


subst和assoc都有一个问题,就是如果有相同的数,就会出现问题,如果保证所有的数都不相同,才可以使用这两个函数

无痕 发表于 2005-1-12 11:13:00

网上的:



<A href="http://www.xdcad.net/forum/showthread.php?postid=1394244#post1394244" target="_blank" >http://www.xdcad.net/forum/showthread.php?postid=1394244#post1394244</A>


<FONT color=#007700>;;************************************************************                </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>3 </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>*****;;; <BR>;| (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>subilst a ilst lst</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) = </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>表项替换</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>,</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>支持子表</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>.----------------</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>ok</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>!---------</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>梦断江南.2004.10 <BR>功能</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>: </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>用a替换ilst中指定位置的lst的项</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>. <BR></FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>参数</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>: </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>a </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>= </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>要替换的项</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>,</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>可是元素或表</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>. <BR>                                                </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>ilst </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>= </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>整数或整数定位表</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>,</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>如</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#dd0000>'(2 3 1),将替换表中第二项的第三项的第一个项.' <BR>                                                </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>lst                </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>= </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>要被替换的表</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>. <BR></FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>返回</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>: </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>成功</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>:</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>替换后的新表</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>. </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>失败</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>,</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>返回原表</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>. <BR></FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>说明</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>: </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>可单独运行</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>,</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>无需加载其他函数</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>. <BR>                                                </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>用了第归的方法</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>. <BR></FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>测试</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>: (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>setq a 333 ilst </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#dd0000>'(2 3 1) lst '</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0 </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0 0 </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>)) </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>)) <BR>                                                (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>subilst a 2 lst</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) -&gt; (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0 333 0</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>setq ilst 2</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR>                                                (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>subilst a ilst lst</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) -&gt; (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0 </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0 0 </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 333</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>)) </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR>                                                (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>subilst </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#dd0000>'333 '</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>2 3 5</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>lst</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) -&gt; (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0 </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0 0 </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0 0</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>)) </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>0</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR>|; <BR>;;*******************************************************************************;;; <BR>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>defun subilst </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>a ilst lst </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>/ </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>n</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR>                (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>setq n </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>-</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>1</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>) <BR>                (if (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>atom ilst</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>)(</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>setq ilst </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>(list </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>ilst</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>))) <BR>                (</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>mapcar </FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#007700>'</FONT><FONT style="FONT-SIZE: 10pt" face="宋体,verdana, Airal,Helvetica,Geneva" color=#0000bb>(lambda(x) <BR>                                                                        (setq n (1+ n)) <BR>                                                                        (if (= (car ilst) n) <BR>                                                                                                        (if (= 1 (length ilst)) a (subilst a (cdr ilst) x)) <BR>                                                                                                        x <BR>                                                                        ) <BR>                                                        ) <BR>                                                                                lst <BR>                ) <BR>)</FONT>
页: [1]
查看完整版本: 矩阵表如何修改其中一个数据