我试图将C代码转换为Mathematica代码,我做错了什么?

时间:2013-01-23 11:01:16

标签: c wolfram-mathematica

我是Mathematica的新手,似乎我在Mathematica语法中缺少一些东西。

我在下面复制了两个代码。

对于此示例,Print [second]必须返回120,但它始终为0.

感谢任何建议。

C:

    int row = 4;
    int column = 10;
    int passenger = 5;
    int luggage = 20;
    int arrival = 15;
    int walking = 5;

    int second = 0;
    int waitingtime = 0;
    int _yolcu = 0;

        for (int i = 0; i <row; i++)
        {
          waitingtime = 0;
          if (_yolcu == passenger)
              break;
          for (int j = 0; j < column; j++)
          { 
              if (_yolcu == passenger)
                  break;
              _yolcu++;
              if (i == 0 && j == 0){
                  second = second + luggage;
                  continue;
                      }

              else
                      {
                  waitingtime = 0;
                  waitingtime =second-(j * walking + arrival * (_yolcu - 1));
                  if (waitingtime>= 0)
                  {
                      second = second + walking + luggage;
                  }
                  else        
                      second = second -  waitingtime+luggage;
              }

          }
      }

数学:

        row = 4;
        column = 10;
        passenger = 5;
        luggage = 20;
        arrival = 15;
        walking = 5;

        second = 0;
        waitingtime = 0;
        _yolcu = 0;

        For[i = 0, i < row, i++, waitingtime = 0;
         If[_yolcu == passenger, Break[],
          For[j = 0, j < column, j++,
           If[_yolcu == passenger, Break[], _yolcu++;
            If[i == 0 && j == 0, second = second + luggage, 
             waitingtime = second - (j*walking + arrival*(_yolcu - 1));
             If[waitingtime >= 0, second = second + walking + luggage, 
              second = second - waitingtime + luggage]]]]]]

        Print[second]

2 个答案:

答案 0 :(得分:2)

_yolcu

不是有效的Mathematica符号名称,因此表达式_yolcu = 5不会导致Mathematica将值为_yolcu的变量5放入上下文符号表中。尝试以交互方式执行语句,然后再次尝试执行_yolcu; Mathematica会(或者更确切地说,对我而言)返回_yolcu而不是5

事实上,_yolcu模式,它与Head yolcu匹配。通常,以下划线开头的任何表达式都是模式;下划线在Mathematica符号的名称中无效。诸如_yolcu++之类的表达式不会增加_yolcu的值。我实际上并不知道它的作用,除了在执行语句时产生错误;也许你的代码实际上并没有碰到它。

如果您还不了解Mathematica模式,建议您查看文档。

而且,在我写作的时候,你所做的事情看起来与将C代码翻译成Mathematica略有不同,它看起来更像是将C代码翻译成'C-written-in-Mathematica`。我认为你的时间最好花在对C问题规范进行逆向工程,然后编写Mathematica解决方案来解决问题。我认为这是你的基本错误,对于下划线的困惑只是对Mathematica的语法不熟悉。

答案 1 :(得分:0)

很高兴你得到了它,但是参考HPMark的最后一段,Mathematica中迭代循环的性能令人沮丧。要编写好的Mathemaitca表达式,您需要考虑以实现相同的方式将函数应用于列表。有点像列表是一个未滚动的Do循环,实际上,迭代是通过遍历此列表来实现的。