设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5703|回复: 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.高手赐教啊!
2 m9 P# \8 b$ o7 N, r# M  r  Aset t  t + 1
! {8 G( O; s0 Q; \0 x7 H! mwhile [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
/ b6 {" k( K/ G7 t7 m* K8 o                          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
  `! d* J* p$ ]* k( k! [5 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]
6 X: p: u" ]" i4 e, ~0 ~- x9 h8 L! Z]
 楼主| 发表于 2008-4-18 15:06:02 | 显示全部楼层
set t t+1  K, p2 f0 i! K8 c
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
6 d1 `6 x. l4 k8 Y0 {, c  W                         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
: R/ `; ^/ T, G: O/ O                         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
2 v( \: D& ]' b" c$ Y8 w                         [stop]
7 P1 @3 l' j6 S1 W                      ]( V, B( M. E" k+ ~# [+ k) x
上面的问题勉强解决了,但为什么老是运行到第6次就死机了,郁闷。" k5 @, z6 O4 @0 t
6 r$ U3 M/ U1 m
[ 本帖最后由 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
5 E4 `7 _/ [+ T% z& Z     set t t + 1
4 A9 W) C! B7 {% U5 t8 Y! Z     grow
! w; A3 @9 `' Y; D' B" c+ A; a     update-list-of-m# N( a7 Q* T4 t7 f' P# [3 g' r9 z. p
     do-plots
8 h- u1 X- u  ?; ~* [     tick  
/ P8 o) a' i) f4 {; N8 z    ifelse t > 83 z$ i, {' W# l2 `( V* N/ j
                  [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
$ P( |4 C" O* x* B# P, L/ ^                      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
* o4 u, o/ y7 T  W3 T: 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 ( p' p* L' r! B3 R
                      [stop]]8 ^5 B3 n% B! {7 _0 N- m' m! S7 v
                      [ ]  : a& o$ r9 g0 M* G5 E0 Q
end
- c* K5 M8 e, g8 W/ x6 U" q& o3 R  N各位大虾帮忙看看,这样好像可以了。以前用while之所以不行,是不是因为如果报告为true,那么就会反复运行后面的命令导致死循环啊?1 T& r' {: u( c$ l# T1 A
还有就是[ ]是不是意味着不执行任何操作,返回set t t + 1,然后grow,  update-list-of-m, do-plots, tick ..........这样一直按这种顺序循环直到停止。
# T5 M( V1 c7 [5 h
4 ]( x5 _7 @% d$ ?0 q3 w! s: r/ j2 u[ 本帖最后由 wjcpcahu 于 2008-4-19 16:19 编辑 ]
 楼主| 发表于 2008-4-29 10:18:36 | 显示全部楼层

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

本版积分规则

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

GMT+8, 2025-6-30 08:09 , Processed in 0.013378 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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