设为首页收藏本站

最大的系统仿真与系统优化公益交流社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6916|回复: 4

[交流] 列表中的条目比较

[复制链接]
发表于 2008-4-18 00:08:38 | 显示全部楼层 |阅读模式
我想创建一个列表list-of-m,其中m值在每轮循环后会更新并fput到list-of-m中。在6轮循环之后开始比较,如果列表中0  1 2项的均值与3 4 5项的均值的绝对值相差小于0.1,并且如果列表中6 7 8项的均值与3 4 5项的均值的绝对值相差小于0.1,并且如果列表中0  1 2项的均值与6 7 8项的均值的绝对值相差小于0.1,就停止程序运行。我按下面的方法编,报告(红色部分):expected number,list,string or boolean.高手赐教啊!6 z1 H) s+ f' o2 {# _$ e: v' @
set t  t + 12 w$ l' B" H. ^1 N% G3 |
while [t > 6 ] [ if abs((mean [item 0 list-of-m item 1 list-of-m item 2 list-of-m]) - (mean [item 3 list-of-m item 4 list-of-m item 5 list-of-m]))< 0.01 and1 T3 w- c- q0 C% t  V
                          abs((mean [item 6 list-of-m item 7 list-of-m item 8 list-of-m]) - (mean [item 3 list-of-m item 4 list-of-m item 5 list-of-m]))< 0.01 and! K+ b3 ?  D) B+ y
                          abs((mean [item 6 list-of-m item 7 list-of-m item 8 list-of-m]) - (mean [item 3 list-of-m item 4 list-of-m item 5 list-of-m])) < 0.01[stop]
+ b3 G' C$ W7 ?& Y. Z' k]
 楼主| 发表于 2008-4-18 15:06:02 | 显示全部楼层
set t t+1# p( D2 q& N5 F) M; b+ O
while [t > 6 ] [ if abs( mean (list (item 0 list-of-m)  (item 1 list-of-m) (item 2 list-of-m)) - mean (list (item 3 list-of-m)  (item 4 list-of-m) (item 5 list-of-m)))< 0.01 and
( G8 ?2 ^  X6 G* ?  m$ [- [: x9 t2 u                         abs( mean (list (item 3 list-of-m)  (item 4 list-of-m) (item 5 list-of-m)) - mean (list (item 6 list-of-m)  (item 7 list-of-m) (item 8 list-of-m)))< 0.01 and# W+ _7 G7 M- O, L9 y: }
                         abs( mean (list (item 0 list-of-m)  (item 1 list-of-m) (item 2 list-of-m)) - mean (list (item 6 list-of-m)  (item 7 list-of-m) (item 8 list-of-m)))< 0.01
4 A/ c1 d5 S7 \; V4 }6 T3 m  a5 S                         [stop]
$ L4 O: D# C0 j: [% s2 [2 i                      ]
' Q9 F8 I1 I; F9 X- D上面的问题勉强解决了,但为什么老是运行到第6次就死机了,郁闷。* n1 I# h- L. k) r  [
+ o% N5 w) ?% e1 ^  g0 X' Q
[ 本帖最后由 wjcpcahu 于 2008-4-18 19:16 编辑 ]
 楼主| 发表于 2008-4-18 19:19:02 | 显示全部楼层

比较怪异

如果将6 改为18,运行到18次就死机,我发现这个程序怎么跟病毒一样!修改0.01没用,减少主体数量也没用,闷啊!!!!!
 楼主| 发表于 2008-4-19 16:11:18 | 显示全部楼层

好像可以了

to go, y' x9 m5 R$ @
     set t t + 1
+ }' V+ b/ h- y: L7 J! z8 I     grow
& u1 G: M' ~% P) K     update-list-of-m! s! p. s9 |* C  K: T$ _1 X8 w
     do-plots4 A0 E3 \, U4 ]- S
     tick  
; L% ?& @8 Q, k" y- d5 r5 d( w    ifelse t > 85 }/ w' b9 L; Z% Q7 z! f
                  [if abs( mean (list (item 0 list-of-m)  (item 1 list-of-m) (item 2 list-of-m)) - mean (list (item 3 list-of-m)  (item 4 list-of-m) (item 5 list-of-m)))< 0.01 and
: e, T3 c; ?2 g. U) w  r8 N                      abs( mean (list (item 3 list-of-m)  (item 4 list-of-m) (item 5 list-of-m)) - mean (list (item 6 list-of-m)  (item 7 list-of-m) (item 8 list-of-m)))< 0.01 and
* ?0 w5 F' z+ N7 ~                      abs( mean (list (item 0 list-of-m)  (item 1 list-of-m) (item 2 list-of-m)) - mean (list (item 6 list-of-m)  (item 7 list-of-m) (item 8 list-of-m)))< 0.01 % r1 _( c7 p+ Z. Z
                      [stop]]: s+ n( u% O$ w$ L6 A6 S
                      [ ]  
& o9 A3 @( _4 M& bend
% }. P1 ?  D: `# G1 ?; l各位大虾帮忙看看,这样好像可以了。以前用while之所以不行,是不是因为如果报告为true,那么就会反复运行后面的命令导致死循环啊?- t" g( F& {+ R; o
还有就是[ ]是不是意味着不执行任何操作,返回set t t + 1,然后grow,  update-list-of-m, do-plots, tick ..........这样一直按这种顺序循环直到停止。
6 X( H) Z- }, \% z1 X% A+ E; H5 h9 {# `
: U: P" p0 ^) ^! {( o! ?[ 本帖最后由 wjcpcahu 于 2008-4-19 16:19 编辑 ]
 楼主| 发表于 2008-4-29 10:18:36 | 显示全部楼层

各位大虾,上面说的对吗?给点意见,小弟心里还是很忐忑的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|SimulWay 道于仿真   

GMT+8, 2026-3-30 00:49 , Processed in 0.014723 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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