我在eiffel中这样定义,以交换值。我们不能使用我们在c++中定义的方式。
swap(x,y):INTEGER
do
x;y := y;x
end如何在Eiffel中定义函数?我想定义堆排序,但它显示了一些错误,有人能帮我消除对函数的疑惑吗?
heapsort(array,N):INTEGER -- heap_sort
do
heap_size : INTEGER
heap_size := N
build(array,N)
from i := N until i >=2 loop
swap(array(1), array(i))
heap_size := heap_size-1
heapify(array,1,heap_size-1)
end
end发布于 2019-11-17 22:31:44
Eiffel中的所有变量都是通过值传递的,因此无法传递两个变量或表达式并交换它们的值。因此,swap应该如下所示
swap (i, j: INTEGER; data: ARRAY [...]) -- Here and below `...` stands for the type of elements.
-- Swap items of `data` at indexes `i` and `j`.
require
valid_i: data.valid_index (i)
valid_j: data.valid_index (j)
local
value: ...
do
value := data [i]
data [i] := data [j]
data [j] := value
ensure
new_at_i: data [i] = old data [j]
new_at_j: data [j] = old data [i]
end然后,在示例中对此过程的调用将如下所示
swap (1, i, array)附注。
heap_sort会返回整数。此外,它还应指定参数类型,如heap_sort ( ARRAY : ARRAY...;N: INTEGER)
N吗?可以使用array.lower和array.upper.
local heap_side: INTEGER do heap_size := N
until之后的表达式指定循环应该终止的条件。使用当前条件i >= 2,循环将永远不会执行,因为i >= 2从一开始就是true。https://stackoverflow.com/questions/58899762
复制相似问题