由於用於添加一個元素到開始的列表中,任何人都可以告訴我是否有函數添加一個元素到末尾的列表?如果沒有,我猜List.rev (element::(List.rev list))
是最直接的方法嗎?將元素添加到列表末尾的最簡單方法是什麼?
謝謝!
由於用於添加一個元素到開始的列表中,任何人都可以告訴我是否有函數添加一個元素到末尾的列表?如果沒有,我猜List.rev (element::(List.rev list))
是最直接的方法嗎?將元素添加到列表末尾的最簡單方法是什麼?
謝謝!
[email protected][element]
應該工作。 @
加入列表。
鑑於此操作是線性的,您不應將其用於性能至關重要的代碼「熱」部分。在寒冷部分,按照Adi
的建議使用list @ [element]
。在熱門的部分,重寫你的算法,這樣你就不需要那樣做。
執行此操作的典型方法是在處理過程中在反向訂單中累積結果,然後在返回結果之前顛倒整個累計列表。如果你有N個處理步驟(每個步驟都添加一個元素到列表中),那麼你就分攤N個元素的反向線性代價,所以你保留一個線性算法而不是二次方法。
在某些情況下,另一種工作是處理反向順序中的元素,以便累計結果變爲正確順序,而無需顯式反轉步驟。
的原因有沒有一個標準功能,要做到這一點的是,在列表的末尾附加是反模式(又名一個「snoc列表」或Schlemiel the Painter algorithm)。在列表末尾添加元素需要列表的完整副本。在列表前面添加一個元素需要分配一個單元格—新列表的尾部可以指向舊列表。
這就是說,最簡單的方法來做到這一點是
let append_item lst a = lst @ [a]