2011-02-13 80 views
1

如何檢查Ada中是否存在陣列元素。還有就像Ado的python或php的文檔站點的任何良好的記錄網站,以便我可以搜索所有類型的功能,它的用途。我無法在Google中找到Ada中某些類型功能的更多信息。如何檢查Ada中是否存在陣列元素

soldiers : array (0..max_number_of_soldiers - 1) of soldier_type; 
procedure Next (Index: in out Integer; Interval: Positive) is 
    begin 
     for I in 1..Interval loop 
      loop 
      Index := (Index + 1) mod Number_Of_Soldiers; 
      exit when Soldiers(Index).Alive; 
      end loop; 
     end loop; 
    end Next; 

Soldiers(Index).Alive顯示什麼?什麼是.alive?

回答

2

「士兵(索引).Alive顯示什麼?活動是什麼?」

soldier_type確切類型定義缺失,但顯然它有一個(布爾)alive場。

有一列max_number_of_soldiers士兵。這段代碼遍歷數組,並在找到一個活着的士兵時退出。

它從索引Index開始,並通過Interval項目循環。如果達到最後,它會在數組的起始處換行並開始。

因此,要回答您的問題,Soldiers(Index).Alive會返回index上的焊料是否存活。

1

即使通過調用例程(也許在運行時從用戶讀取適當的大小),Ada中的數組可以用編碼器期望的任何邊界來聲明。編碼器可以使用'first,'last'length等屬性來回顧邊界。按照約定,Ada中的數組通常不使用終結符的值。

這一切都加在一起的是,通常Ada數組中的每個元素都被假定爲包含有效值。如果出於某些原因,這可能並非總是如此,那麼編碼人員有責任提出一個方案來跟蹤哪些元素具有良好的價值。

對於您提供的代碼,它看起來像該數組中的每個元素都被假定爲有效值爲soldier_type,這顯然是一個記錄類型,其布爾字段名爲Alive。除了他用它來終止他的循環之外,我可以告訴你的並不多。

嗯,我想我可以告訴你,如果整個陣列中沒有記錄設置了Alive標誌,那麼你有一個無限循環。這可能不是你想要發生的事情。另外,如果是我,我會讓數組從1..max_number_of_soldiers,只是因爲它讀得更好。要麼處理這個數組的代碼更多,當它基於0的時候看起來更好,或者有人是C編碼器,並且無法擺脫舊的習慣。

對於文檔,我建議看一下Ada tag's wiki中列出的網站。如果你對語言定義的函數和其他東西有特別的興趣,那麼你應該知道整個language reference manual可以在線獲得(與我可以命名的許多其他語言不同)。我強烈建議查看附件A(預定義的語言環境),K(語言定義的屬性)和L(語言定義的Pragma)。尤其應該仔細閱讀K.