0

我想交换 oz 列表中的项目。

所以假设我有 L = [1 2 3],我希望它是 L = [1 4 3]。

一个人会怎么做呢?我懂了

{List.member X +Ys ?B}

以及https://mozart.github.io/mozart-v1/doc-1.4.0/base/list.html上的其他各种可能的功能

但我并不真正理解这些表达式的语法。我对奥兹很陌生。

4

1 回答 1

0

如果您想交换编号为 N 的特定元素,您可以遍历列表直到找到它,然后替换它并保留列表的其余部分。这就像

declare
fun {Swap Xs N Y}
    case Xs of nil then nil % There is no Nth element, the list doesn't change
    [] X|Xr then 
        if N==1 then Y|Xr % Replace _ with Y and append the rest
        else X|{Swap Xr N-1 Y} end % Continue to iterate through the list, but keep the previous elements of the list
    end
end

你也可以在里面使用一个辅助函数,Swap这样你就不必在每次递归调用时都传递 Y,但我不想用细节来打扰你,因为你是初学者。

于 2014-10-06T19:01:55.567 回答