数学建模社区-数学中国

标题: 模块变量及编译符mvar的使用 [打印本页]

作者: forcal    时间: 2011-5-27 19:11
标题: 模块变量及编译符mvar的使用
Forcal中,通常模块变量要先声明,后使用。例如:
  1. init(::a,b,c)= a=11, b=22, c=33;  //模块变量赋初值" R3 S5 W5 P" U! i; E
  2. f(x::a,b,c)=x+a+b+c;  //函数f中使用了模块变量
      X+ `: `/ f0 G9 x4 ~$ L
  3. f(1);  //函数调用
复制代码
结果:
3 A2 Z8 A# {5 w67.% b; n  r% {2 Z# J; H

  Y: Y: o/ |  G5 @) Q* B* D当使用编译符mvar时,未声明的变量均看作模块变量,故前面的例子可写成:
  1. mvar:
    8 M3 w5 X& O+ z# z7 E
  2. a=11, b=22, c=33;  //模块变量赋初值) J, S5 Z: b; s% O8 f0 k0 Y
  3. f(x)=x+a+b+c;  //函数f中使用了模块变量4 B6 \: @4 ?. C  R0 b: N' f
  4. f(1);  //函数调用
复制代码
结果:
( d  ^: {. Y" u67.1 ]9 w4 ^) y* Q

) ]6 g% J& H4 a! M5 j这样看起来似乎不错,的确,在简单的程序中,这样写代码很简洁方便。不过,在复杂的程序中却不推荐使用编译符mvar,因为它常常会隐藏一些人为的错误,例如下面的代码通过了编译,但--看看你的眼力,能否发现其中的错误?
  1. mvar:
    - ?+ ?5 M6 _* a3 N$ g7 B
  2. a=11, b=22, c=33;  //模块变量赋初值
    4 d6 d+ L( E# b7 H3 |; Y
  3. f(x)=x+a+d+c;  //函数f中使用了模块变量! U& o) g; c' [
  4. f(1);  //函数调用
复制代码
若显示地声明模块变量,编译器会帮你发现这个错误:
  1. init(::a,b,c)= a=11, b=22, c=33;  //模块变量赋初值
    " d$ _. S, s  ]+ w  ?: S! A
  2. f(x::a,b,c)=x+a+d+c;  //函数f中使用了模块变量4 v. D9 S  M) C/ v) k- J
  3. f(1);  //函数调用
复制代码
故复杂的程序中,慎用编译符mvar。
作者: pxwgih    时间: 2012-1-1 13:45
我反复看了多遍,好帖,得支持
作者: alair004    时间: 2012-2-6 14:33
囧了,下了无数不知道用哪个有用1988890824492765




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5