Tak Lean to rieši po svojom. Chlapík to tu vysvetľuje. (Ale píše, že si nie je stopercentne istý.)
Lean nemodifikuje pôvodné pole, ale zahodí ho a na jeho mieste v pamäti sa nejako šikovne vytvorí nové, modifikované pole.
def main : IO Unit := do let a := Array.mk [1, 2, 3, 4, 5] -- makes a copy of a (since a is still referenced) -- and modifies element in position 3 let b := a.set! 3 44 let b := b.set! 4 55 -- modifies b in-place println! a println! b
Funguje to vtedy, ak na oboch stranách priradenia je rovnaké pole.
Tak immutable arrays sú už predbežne schválené, vybrali si už aj syntax [: :]. F# rieši dilemu tak, že má čisté API a nečisté API, pričom to východzie je immutable, napr. Array.InsertAt. Ak sa má pole modifikovať, tak je tam explicitne uvedený úmysel, Array.sort vs Array.sortInPlace. (Nejako podobne rieši Python privátne importy.)
Clojure to rieši tak, že na "nečistú prácu" odkazuje použiť Javu, teda jej pole.