2012-07-27 42 views
0

我在某種程度上很難理解LOOP中的以下程序(您也可以閱讀其原文German中的文章),它應該模擬IF x=0 THEN A ENDLOOP if-simulation,需要幫助瞭解

y:=1; 
LOOP x DO y:=0 END; 
LOOP y DO A END; 

這究竟如何模擬IF陳述?爲什麼我能做到這一點並不:

x:=0; 
LOOP x DO A END; 
+0

這是什麼語言?您應該將其添加爲標籤。 – outis 2012-07-27 07:46:23

+0

這是一個LOOP語言,非常陳舊,語言如此老,以至於在stackoverflow中沒有標籤..:D – doniyor 2012-07-27 07:48:20

+0

比FORTRAN和COBOL更老嗎?因爲SO有這些標籤。無論如何,這個問題需要關於語言的說明;如果沒有標籤,則可以在問題中指定「LOOP」是編程語言的名稱,而不僅僅是對循環的引用。由於語言晦澀難懂,它也可以使用鏈接獲取更多信息。 – outis 2012-07-27 07:57:26

回答

1

我不知道這是什麼語言,但如果假設LOOP cntr DO stmt END;只要cntr大於零執行stmt(和它的每次迭代之後遞減),那麼這工作原理如下:

1被分配到y。如果x大於零,則y分配爲0。如果x爲零,則y的值仍爲1。在下一個循環中,如果y1,那麼A將被執行一次,只有當前一個LOOP聲明未執行時,即x等於0時,情況纔是如此。這個結構的主要優點是是x值如果大於零,這LOOP x DO A END;會做大於A只執行一次,並沒有那麼多時間。

這裏是邏輯再次,一步一步:

  • y設置爲1
  • y被設置爲零x倍。這相當於IF x <> 0 THEN y:=0 END
  • A執行y倍(一次如果x是零本零次如果x是非零)

這三個步驟轉換爲:如果x是零,則執行A一次,否則執行A零次(即不執行)。

+0

好,所以如果我看到它,它的工作是這樣的: 如果x> 0,則設置y = 0的這麼多次x的值,那麼如果X上運行A, = 0,然後直接運行A.我對嗎? – doniyor 2012-07-27 07:46:15

+0

如果'x <> 0',那麼'y'將被設置爲'0',並且下一個循環將執行'A'零次。只有當'x = 0'時,'y'纔會保留'1'的值,並且在下一個循環中'A'將會被一次執行_exactly。所以總之,如果'x = 0',那麼'A'只執行一次。否則'A'執行零次(即根本不執行)=>'IF x = 0 THEN A END' – 2012-07-27 07:50:49

+0

我認爲,如果''x <> 0''那麼下一個循環將不會執行''A'',因爲''y = 0''。只有''x = 0'',然後''y = 1''使下一個循環只運行''1'' - 時間。對? – doniyor 2012-07-27 07:54:59