2013-04-03 103 views
6

如何在PARI/GP中製作跨越每個級別多行的嵌套循環?我經常需要在循環內部做很多事情,爲了可讀性,我不喜歡在單行上編寫循環。對於遍歷一個變量,我一直在做這樣的:如何在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運行它們。

回答

9

與我們對類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))); 
} 
+0

歡迎來到Stack Overflow,非常感謝。 –

+0

PS。我認爲每個代碼塊中的第二個for循環應該有逗號。否則,這很好。 –

+0

授予。只是修復了片段! –