如何在Eiffel中初始化并填写链接列表?

时间:2018-12-20 04:16:05

标签: eiffel eiffel-studio-18

这是我到目前为止所拥有的。

create {LINKED_LIST[INTEGER]} list.make
from
    i := 0
    list.start
until
    i = 11
loop
    list.put(i)
    i := i + 1
    list.forth
end

调试器指向list.put(i)行。我认为问题在于列表未正确初始化?我在弄清楚如何使用linked_list时遇到了一个问题,因为找不到合适的教程来提供帮助。如您所见,我只是试图编写一个在链接列表中添加数字[0,10]的LINKED_LIST程序。不是学校的项目。只是在即将开始的课程之前练习。请帮忙!

1 个答案:

答案 0 :(得分:1)

让我们看一下原始示例中使用的功能的注释:

  1. LIST.put (v: like item):用v替换当前项目。
  2. LIST.start:将光标移到第一位置。
  3. LIST.forth:移至下一个位置。

新创建的列表为空。因此,没有可以通过调用put替换的项目。这说明了调试器为何在功能put处停止:违反了该功能的先决条件。

查看类LIST的接口视图,有一个功能子句Element change,具有以下功能:

  • append (s: SEQUENCE [G]):附加s的副本。
  • extend (v: G):添加新出现的v
  • fill (other: CONTAINER [G]):尽可能多地填充other的项目。
  • force (v: like item):在末尾添加v
  • put (v: like item):用v替换当前项目。
  • sequence_put (v: like item):在末尾添加v
  • put_i_th (v: like item; i: INTEGER_32):将v放在第i的位置。
  • replace (v: G):用v替换当前项目。

因为我们正在讨论的是将新元素添加到列表末尾的功能,所以只有以下几种适用:extendforcesequence_put。在这种情况下,idiomatic feature nameextend

考虑到这一点,原始循环变为:

from
    i := 0
until
    i = 11
loop
    list.extend (i)
    i := i + 1
end