数学建模社区-数学中国

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

作者: forcal    时间: 2011-5-27 19:11
标题: 模块变量及编译符mvar的使用
Forcal中,通常模块变量要先声明,后使用。例如:
  1. init(::a,b,c)= a=11, b=22, c=33;  //模块变量赋初值
    * V" o! k' {5 {. m/ z3 h0 F
  2. f(x::a,b,c)=x+a+b+c;  //函数f中使用了模块变量
      W+ y" j; _5 p9 F
  3. f(1);  //函数调用
复制代码
结果:
/ Y. e- G! j$ A67.
& y  f4 p' G0 O4 h1 P# f/ v- K) h0 o2 B% G+ h
当使用编译符mvar时,未声明的变量均看作模块变量,故前面的例子可写成:
  1. mvar:; X& g" x* m2 R& Q% @8 r1 G, r& K* r
  2. a=11, b=22, c=33;  //模块变量赋初值6 S5 b% L+ f3 b
  3. f(x)=x+a+b+c;  //函数f中使用了模块变量; M& h4 f6 _- m' Y9 M
  4. f(1);  //函数调用
复制代码
结果:
& E0 k+ f, p4 v. t' k67.
! p# w+ M" b3 O3 D5 |! }, K# d' i+ g0 F+ `" ?) ?, \5 b
这样看起来似乎不错,的确,在简单的程序中,这样写代码很简洁方便。不过,在复杂的程序中却不推荐使用编译符mvar,因为它常常会隐藏一些人为的错误,例如下面的代码通过了编译,但--看看你的眼力,能否发现其中的错误?
  1. mvar:
    7 g, _3 U# {& b9 E7 r1 ~) a* I
  2. a=11, b=22, c=33;  //模块变量赋初值
    $ Z- @0 x$ K8 B+ h, u: f
  3. f(x)=x+a+d+c;  //函数f中使用了模块变量
    ; E* s( z5 e4 q4 j" T0 g' I& R
  4. f(1);  //函数调用
复制代码
若显示地声明模块变量,编译器会帮你发现这个错误:
  1. init(::a,b,c)= a=11, b=22, c=33;  //模块变量赋初值
    8 {$ r0 }& c$ ?  ^5 o9 a
  2. f(x::a,b,c)=x+a+d+c;  //函数f中使用了模块变量4 K2 Q2 X* x% E8 T
  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