Mathematica:有条件的"编译"

Rus*_*lan 0 wolfram-mathematica conditional-compilation

我正在尝试创建一个条件表达式来初始化一些函数,变量等.在C中看起来像这样的东西:

#if option==1
  int foo(int x){/*some code here*/}
  int q=10;
#else
  char foo(int x){/*some other code*/}
  double q=3.141592;
#endif
use_q(q);
f(some_var);
Run Code Online (Sandbox Code Playgroud)

在Mathematica中,我尝试过使用If,像这样:

If[option==1,
foo[x_]=some_expression1;
q=10;
,
foo[x_]=some_expression2;
q=3.141592;
]
use_q[q];
f[some_var];
Run Code Online (Sandbox Code Playgroud)

但结果是函数的参数被涂成红色,并且在If中没有任何内容被初始化或计算.那么,我该怎样做才能获得有条件的"编译"?

Leo*_*rin 7

几件事:

  1. 千万不能使用空格(下划线)在变量名-在数学这些被保留的符号,代表的模式.

  2. 如果你条件不计算为TrueFalse,If没有任何评价.

从而:

In[12]:= If[option==1,Print["1"],Print["Not 1"]]
Out[12]= If[option==1,Print[1],Print[Not 1]]
Run Code Online (Sandbox Code Playgroud)

因此你的结果.在这种特殊情况下,红色的colred参数不是问题.您应该使用===代替==,或者TrueQ[option==1],以获得您想要的东西.有关更多信息,请查看此处.