簡體   English   中英

在 OCaml 中將整數列表轉換為字符串

[英]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 (我在不同的折疊問題中使用它來計算字符串中的字符),但我不知道這是否是正確的。

謝謝!

你的基本布局在我看來是正確的。 許多事情需要解決。 以下是一些:

  1. 您必須選擇要使用的特定折疊函數, List.fold_leftList.fold_right

  2. 要折疊的函數有兩個參數。 一個是累積結果,另一個是列表中的下一個輸入。 順序取決於您使用的是fold_left還是fold_right 您的代碼草圖有兩個參數,但其中一個參數可疑地命名為s 這會不會是相同的s作為輸入列表中。 fun后面的名稱是當時引入的新參數變量。

  3. 用於連接字符串的 OCaml 運算符是^ ,這是您應該在有+地方使用的運算符(可能只是代碼中的占位符)。

  4. 您需要在連接之前將每個 int 轉換為字符串。 有一個名為string_of_int的函數可以執行此操作。

  5. 您必須將折疊應用於列表。 即, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM