此代碼旨在打印1到30之間的非素數。它如何工作以及錯誤在哪裏。如何打印非素數? PL/SQL
BEGIN
<<outer>>
FOR i in 1..30
<<inner>>
for k in 2..i-1 loop
if (mod(i, k) = 0) THEN
DBMS_OUTPUT.PUT_LINE(i);
exit inner when (mod(i, k)= 0);
end if;
end loop inner
end loop outer
end;
顯然它不起作用。當'i = 1'時,'2..i-1'中的k解析爲'2..0'中的k。還有其他一些錯誤,但這代碼高爾夫,所以它是關閉主題。 – APC 2013-04-23 14:22:44
@APC:令人驚訝的是,似乎確實有效。一旦你修復了語法錯誤,輸出是正確的。 the5strace:請更正語法(仔細查看你的兩個「for」行,你會看到不同)。然後記住';'不只是裝飾。有些地方需要他們。 – Mat 2013-04-23 14:28:31
@APC'i = 1'的情況是有效的,因爲plsql要求第一個邊界低於第二個邊界以進入循環。反轉迭代順序需要修改器'REVERSE',如'FOR k IN REVERSE LO..HI LOOP ... END LOOP'。 – collapsar 2013-04-23 14:39:53