数学建模社区-数学中国

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

作者: forcal    时间: 2011-5-27 19:11
标题: 模块变量及编译符mvar的使用
Forcal中,通常模块变量要先声明,后使用。例如:
  1. init(::a,b,c)= a=11, b=22, c=33;  //模块变量赋初值
      I& r: s7 v$ _1 @
  2. f(x::a,b,c)=x+a+b+c;  //函数f中使用了模块变量' U4 Y4 D8 u- u8 `8 a$ f
  3. f(1);  //函数调用
复制代码
结果:3 y9 X# A2 m  H0 q5 P  _5 Z# y9 y3 f# A
67.
3 e; N. r% k- @6 _
9 q- X9 w9 \* E' s6 m4 Z, h. d' w当使用编译符mvar时,未声明的变量均看作模块变量,故前面的例子可写成:
  1. mvar:7 @, K  x* k3 J: U/ _& r5 T' R5 h
  2. a=11, b=22, c=33;  //模块变量赋初值
    3 k. K# |7 D& c% d- n% N9 `
  3. f(x)=x+a+b+c;  //函数f中使用了模块变量
    0 H7 h3 J' {0 ]5 E" F' O
  4. f(1);  //函数调用
复制代码
结果:
& O$ o3 |. @8 O+ p67.
" g+ h; o; Y' ?' U2 m7 k8 @  f8 T+ E) l/ _* J- |# N0 K9 O5 \
这样看起来似乎不错,的确,在简单的程序中,这样写代码很简洁方便。不过,在复杂的程序中却不推荐使用编译符mvar,因为它常常会隐藏一些人为的错误,例如下面的代码通过了编译,但--看看你的眼力,能否发现其中的错误?
  1. mvar:
    9 i, }  P9 ?7 c, {( {. \' r
  2. a=11, b=22, c=33;  //模块变量赋初值  c+ w  u; \* u1 p% m$ }
  3. f(x)=x+a+d+c;  //函数f中使用了模块变量7 C. j9 ]' b' k9 j% s/ n% e
  4. f(1);  //函数调用
复制代码
若显示地声明模块变量,编译器会帮你发现这个错误:
  1. init(::a,b,c)= a=11, b=22, c=33;  //模块变量赋初值
    ; _) j9 e/ W: F1 \; J
  2. f(x::a,b,c)=x+a+d+c;  //函数f中使用了模块变量
    8 C9 Q3 M% {5 t9 r! X* Z
  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