设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7226|回复: 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.高手赐教啊!* J2 ^, ^5 V9 {9 n* G
set t  t + 19 `0 `4 M% E3 x( q
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 and
3 e' z: h( y- D. \" @( P/ [                          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- X+ v, D* ]6 @4 F9 I, f! Y( I0 m+ 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[stop]5 q; o1 V$ g- I8 a3 Z
]
 楼主| 发表于 2008-4-18 15:06:02 | 显示全部楼层
set t t+1
! d. _9 {9 Z: \* Bwhile [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 and7 T1 R# l: g: g( [$ K5 n7 I+ 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) }9 ]! x% x" ]/ [
                         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
! H& M2 Z; S2 O. t! V9 N5 q                         [stop]; c6 `7 p) l: q# q) U
                      ]
6 r2 v% H6 w; Z. Z* z+ b5 s上面的问题勉强解决了,但为什么老是运行到第6次就死机了,郁闷。
' ?& m9 s9 ~6 |2 `5 z
' Z! Q2 f  N* l7 t# |1 o[ 本帖最后由 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
0 [- w7 u) Y& i# J     set t t + 1
2 U1 A1 X$ i/ R% B" L2 Z     grow
6 g* }# {9 U4 ]5 {1 d& o     update-list-of-m
( x; G+ {! f0 y. z3 m. Q     do-plots  P3 b; l4 Z5 K! f3 F  _" ?
     tick  
( k8 E4 F1 w  K( U1 I. R    ifelse t > 84 i# |2 Q/ l3 Y5 z) ^# s
                  [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
/ q: K0 l. U& k4 z2 n3 t4 R2 [                      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
# o# [6 r0 V+ i( M$ u                      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 H# N; P& f0 Z& _4 W
                      [stop]]
, A+ D6 f4 N6 }0 o/ }/ ?, p                      [ ]  / o) ^2 {6 E" |
end* b6 x  {+ l/ `, t
各位大虾帮忙看看,这样好像可以了。以前用while之所以不行,是不是因为如果报告为true,那么就会反复运行后面的命令导致死循环啊?5 }0 V4 H; p9 q) r
还有就是[ ]是不是意味着不执行任何操作,返回set t t + 1,然后grow,  update-list-of-m, do-plots, tick ..........这样一直按这种顺序循环直到停止。
. m( {* S" I1 ~1 a3 b* F9 K
& [! C) W1 J- ]6 v! g9 ^5 \3 r7 ?/ {0 X[ 本帖最后由 wjcpcahu 于 2008-4-19 16:19 编辑 ]
 楼主| 发表于 2008-4-29 10:18:36 | 显示全部楼层

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

本版积分规则

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

GMT+8, 2026-6-19 18:31 , Processed in 0.012385 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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