Как вы измените элемент в списке в Оз?

Я хочу поменять элемент в списке в унции.

Допустим, у меня есть 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

Но я не очень понимаю синтаксис этих выражений. Я очень новичок в Оз.

1 ответ

Если вы хотите поменять местами определенный элемент с номером 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 при каждом рекурсивном вызове, но я не хотел беспокоить вас деталями, так как вы новичок.

Другие вопросы по тегам