繁体   English   中英

我正在尝试将C代码转换为Mathematica代码,我在做什么错?

[英]I am trying to convert C code to Mathematica code, what am i doing wrong?

我是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;
              }

          }
      }

Mathematica:

        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]

这个

_yolcu

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

实际上_yolcu是与Head yolcu匹配的模式 通常,任何以下划线开头的表达式都是模式。 下划线在Mathematica符号名称中无效。 诸如_yolcu++类的表达式不会使_yolcu的值_yolcu 我实际上不知道它的作用,除了在执行该语句时会产生错误外,还不知道是什么。 也许您的代码实际上从未实现过。

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

而且,在我撰写本文时,您所做的工作与将C代码转换为Mathematica的方式看起来有细微的差别,看起来好像您已经将C代码转换为“ C-in-Mathematica”一样。 我认为您最好花时间对C进行逆向工程以使其符合问题规范,然后为该问题编写Mathematica解决方案。 我认为这是您的基本错误,对下划线的混淆只是对Mathematica的语法不熟悉。

很高兴您可以使用它,但是参考HPMark的最后一段,Mathematica中迭代循环的性能令人沮丧。 要编写良好的Mathemaitca表达式,您需要考虑将函数应用于列表的方式,以实现相同的目的。 类似于列表是展开的Do循环,实际上,遍历此列表可实现迭代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM