如何在PARI/GP中创建跨越每个级别多行的嵌套循环?我经常需要在循环中做多个事情,为了便于阅读,我不喜欢在一行上编写循环.对于一个变量的循环,我一直这样做:
for(i=1,10,{
printf("%u\n",i);
})
Run Code Online (Sandbox Code Playgroud)
但是,对于嵌套循环,我只设法将换行符放在一个级别.这有效:
for(i=1, 10, for(j=1, 10, {
printf("%2u\t%2u\n", i, j);
}));
Run Code Online (Sandbox Code Playgroud)
这也有效:
for(i=1, 10, {
for(j=1, 10, printf("%2u\t%2u\n", i, j));
});
Run Code Online (Sandbox Code Playgroud)
但是,这是我真正想做的事情:
for(i=1, 10, {
for(j=1, 10, {
printf("%2u\t%2u\n", i, j);
});
});
Run Code Online (Sandbox Code Playgroud)
最后一个例子不起作用; 它给出了一个错误:
*** 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
Run Code Online (Sandbox Code Playgroud)
我在OS X 10.8.3上使用PARI/GP 2.5.3.我将脚本写入文件nested_for.gp并gp ./nested_for.gp在Bash中运行它们.
K.B*_*.B. 11
与我们对类似C语法的期望相反,大括号不会在GP中定义块.它们只允许在多个连续行上分割一系列指令.他们没有筑巢; 另一方面,您可以在单个{}块中嵌套循环:
{
for (i = 1, 10,
for (j = 1, 10,
print (i+j)))
}
Run Code Online (Sandbox Code Playgroud)
多行命令通常可以在用户函数中找到,并且在这样的上下文中可能看起来更自然:
fun(a, b) =
{
for (i = 1, a,
for (j = 1, b,
print (i+j)));
}
Run Code Online (Sandbox Code Playgroud)