【问题标题】:How to make multi-line nested for loops in PARI/GP?如何在 PARI/GP 中制作多行嵌套 for 循环?
【发布时间】:2013-03-25 12:07:27
【问题描述】:

如何在 PARI/GP 中创建在每个级别跨越多行的嵌套循环?我经常需要在 for 循环中做很多事情,而且为了可读性,我不喜欢将循环写在一行上。对于一个变量的循环,我一直在这样做:

for(i=1,10,{
    printf("%u\n",i);
})

但是,对于嵌套循环,我只设法将换行符放在一个级别。这有效:

for(i=1, 10, for(j=1, 10, {
     printf("%2u\t%2u\n", i, j);
}));

这也有效:

for(i=1, 10, {
     for(j=1, 10, printf("%2u\t%2u\n", i, j));
});

但是,这是我真正想做的:

for(i=1, 10, {
     for(j=1, 10, {
          printf("%2u\t%2u\n", i, j);
     });
});

最后一个例子不起作用;它给出了一个错误:

  ***   sorry, embedded braces (in parser) is not yet implemented.
... skipping file 'nested_for.gp'
  ***   at top-level: printf("%2u\t%2u\n",
  ***                 ^--------------------
  *** printf: not a t_INT in integer format conversion: i.
  ***   Break loop: type 'break' to go back to GP

我在 OS X 10.8.3 上使用 PARI/GP 2.5.3。我将我的脚本写入文件 nested_for.gp 并在 Bash 中使用 gp ./nested_for.gp 运行它们。

【问题讨论】:

    标签: pari-gp


    【解决方案1】:

    与我们对类 C 语法的期望相反,大括号没有定义块 全科医生。它们只允许在多个上拆分一系列指令 连续的行。他们不筑巢;另一方面,您可以嵌套循环 在单个 { } 块内:

    {
      for (i = 1, 10,
        for (j = 1, 10,
          print (i+j))) 
    }
    

    多行命令通常出现在用户函数中,可能看起来 在这种情况下更自然:

    fun(a, b) =
    {
      for (i = 1, a,
        for (j = 1, b, 
          print (i+j)));
    }
    

    【讨论】:

    • 附言。我认为每个代码块中的第二个 for 循环应该有逗号。否则效果很好。
    • 同意。刚刚修复了 sn-ps !
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2020-06-24
    • 2018-11-24
    • 1970-01-01
    • 2015-01-28
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多