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