我的這段代碼的目標是根據一個簡單的條件將兩個拆分列表分成兩個列表,而我在一個函數中做這件事情時遇到了麻煩。如何跟蹤OCaml中的函數(fold)中的兩個列表?
目前,我摺疊傳入的列表,並說如果條件爲真,添加到列表之一。然後我再次摺疊並說出條件是否爲假,將其添加到列表2中。對於更大的列表來說,這是非常低效的,我不知道如何將它整合到一起。
我的工作,低效的代碼目前看起來是這樣的:
let function test old_list_one original_list =
let list_one = (fold (fun a elt ->
if condition = true then elt::a
else a) old_list_one original_list) in
let list_two = (fold (fun a elt ->
if condition = false then elt::a
else a) [] original_list) in
do_something list_one list_two
這適用於較小的集,但耗盡資源在更大的套。我嘗試了褶皺結合這樣的:
let function test old_list_one =
let list_two = [] in
let list_one = (fold (fun a elt ->
if (condition) = true then elt::a
else elt::list_two) old_list_one original) in
do_something list_one list_two
ocaml的不跟蹤list_two的,我怎麼能可以跟蹤list_two和list_one於一體的功能仍然[] ...?
此外,對於那些不熟悉倍 - 那就是每一個元素遍歷原件及積聚的結果old_list_one(在這個例子中)的功能
編輯:使用一個元組作爲蓄能器的伎倆!
這不是一個「撞車」,這是一個編譯器錯誤。順便說一句,在OCaml StdLib中包含一個函數來完成這個任務。 'List.partition'。 – nlucaroni
不允許使用除普及以外的任何內容,儘管感謝您的迴應。 –