如何在PARI / GP中进行多行嵌套for循环?

时间:2013-04-03 17:18:15

标签: pari-gp

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

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运行它们。

1 个答案:

答案 0 :(得分:10)

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

{
  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)));
}