[英]Turning list of integers into string in OCaml
如何使用折疊將整數列表(例如 [1;2;3])轉換為單個字符串“123”?
現在,我想我正在做:
let int_list_to_string (s : int list) : string =
fold (fun s combine -> combine + .... ) ""
或類似的東西,其中....可能類似於 String.length (我在不同的折疊問題中使用它來計算字符串中的字符),但我不知道這是否是正確的。
謝謝!
你的基本布局在我看來是正確的。 許多事情需要解決。 以下是一些:
您必須選擇要使用的特定折疊函數, List.fold_left
或List.fold_right
。
要折疊的函數有兩個參數。 一個是累積結果,另一個是列表中的下一個輸入。 順序取決於您使用的是fold_left
還是fold_right
。 您的代碼草圖有兩個參數,但其中一個參數可疑地命名為s
。 這會不會是相同的s
作為輸入列表中。 fun
后面的名稱是當時引入的新參數變量。
用於連接字符串的 OCaml 運算符是^
,這是您應該在有+
地方使用的運算符(可能只是代碼中的占位符)。
您需要在連接之前將每個 int 轉換為字符串。 有一個名為string_of_int
的函數可以執行此操作。
您必須將折疊應用於列表。 即, fold 需要 3 個參數,但您在代碼草圖中只提供了 2 個參數。
請注意, fun
需要使用^
- 運算符連接acc
和下一個列表元素。 List.fold_left
的累加器需要與 output 類型相同,所以必須為空字符串: ""
。
let int_list_to_string lst = List.fold_left (fun acc x -> acc ^ string_of_int x) "" lst
val int_list_to_string : int list -> string = <fun>
# int_list_to_string [1;2;3];;
- : string = "123"
還可以創建更高級的字符串,例如使用list
-syntax:
let int_list_to_string_fancy lst =
"[" ^ ( List.fold_left( fun acc x -> acc ^ string_of_int x ^ ";" ) "" lst) ^ "]"
val int_list_to_string_fancy : int list -> string = <fun>
# int_list_to_string_fancy [1;2;3];;
- : string = "[1;2;3;]"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.