如何在 Eiffel 中初始化和填充链表?

How do I initialize and fill a linked list in Eiffel?

这是我目前的情况。

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 时遇到了一些问题,因为我找不到任何合适的教程来提供帮助。如您所见,我只是想编写一个 LINKED_LIST 程序,在链表中添加数字 [0,10]。不是学校项目。只是在即将到来的课程之前练习。请帮忙!

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

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

新创建的列表是空的。因此,没有可以通过调用 put 来替换的项目。这解释了为什么调试器在功能 put 处停止:违反了功能的前提条件。

查看classLIST的界面视图,有一个特征子句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