如何检查Ada中是否存在数组元素

时间:2011-02-13 23:44:42

标签: ada

如何检查以查看Ada中是否存在数组元素。 Ada还有任何好的文档站点,如python或php的文档站点,因此我可以搜索所有类型的函数及其用途。我无法在谷歌中找到更多关于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;

什么是士兵(指数)。活动显示?什么是.alive?

2 个答案:

答案 0 :(得分:2)

  

“什么是士兵(索引)。活着表示什么是.alive?”

缺少soldier_type的确切类型定义,但显然它有一个(布尔)alive字段。

有一群max_number_of_soldiers士兵。这段代码遍历数组,并在找到一个活着的士兵时退出。

从索引Index开始,循环遍历Interval个项目。如果它到达结尾,它将在数组的开头包装并开始。

所以,回答你的问题,士兵(指数).Alive会返回index的焊料是否存活。

答案 1 :(得分:1)

Ada中的数组可以用编码器所需的任何边界声明,甚至可以通过调用例程(也许在运行时从用户那里读出适当的大小)来声明。编码器可以使用'first'last'length等属性重新检索边界。按照惯例,Ada中的数组通常不使用终结符的sentinal值。

这一切加起来通常假设Ada数组中的每个元素都包含有效值。如果有一些原因可能并非总是如此,那么编码员有责任提出一个方案来跟踪哪些元素具有良好的价值。

对于您提供的代码,看起来假设该数组中的每个元素都具有有效值soldier_type,这显然是一个具有名为Alive的布尔字段的记录类型。除了他用它来终止他的循环这一事实,我没有太多可以告诉你的事情。

好吧,我想我可以告诉你,如果整个数组中的记录都没有设置Alive标志,那么你就有了一个无限循环。那可能不是你想要发生的事情。另外,如果是我,我会让数组从1..max_number_of_soldiers开始,只是因为它读得更好。还有更多的代码处理该数组,当它从0开始时看起来更好,或者有人是C编码器,并且在放弃旧习惯方面遇到了麻烦。

对于文档,我建议查看Ada tag's wiki中列出的网站。如果您对语言定义的函数以及诸如此类的东西特别感兴趣,那么您应该知道整个language reference manual可以在线获得(与我可以命名的许多其他语言不同)。我强烈建议查看附件A(预定义语言环境),K(语言定义属性)和L(语言定义编译语)。特别是K应该被彻底阅读。