0

我目前拥有的代码是我正在测试 stringOfList 函数的地方

let rec sepConcat sep sl = match sl with
   | [] -> ""
   | h :: t -> 
       let f a x = a^sep^x in
       let base = h  in 
       let l = t in  
         List.fold_left f base l

let stringOfList f l = sepConcat  "; " (List.map f l)

我应该得到的输出是

# stringOfList string_of_int [1;2;3;4;5;6];;
- : string = "[1; 2; 3; 4; 5; 6]"

但我得到

# stringOfList string_of_int [1;2;3;4;5;6];;
- : string = "1; 2; 3; 4; 5; 6"

我究竟做错了什么?如何在括号内添加额外的 []。Sepconcat 应该这样做

# sepConcat ", " ["foo";"bar";"baz"];;
- : string = "foo, bar, baz"

# sepConcat "---" [];;
- : string = ""

# sepConcat "" ["a";"b";"c";"d";"e"];;
- : string = "abcde"

# sepConcat "X" ["hello"];;
- : string = "hello"
4

2 回答 2

2

您没有做错任何事情,只是代码中没有添加方括号字符的地方。

我想说方括号是另一个标点符号,就像你的sep参数一样。您可能希望在某个级别将它们作为附加参数传递。似乎可以将它们作为参数添加到sepConcat-- 然后它将处理所有标点符号。

编辑:将不同的值传递为sep. 分隔符字符串之间。根据您的描述,您希望额外的括号围绕结果的外部。不是分隔符。

编辑:"字符不是字符串的一部分。它们是 OCaml 向您展示值是字符串的方式。

# let x = "a";;
val x : string = "a"
# x;;
- : string = "a"
# String.length x;;
- : int = 1
#

解释器打印时,任何字符串值都会在其周围带有“”。所以方括号不可能在它们之外!

于 2012-10-27T02:48:59.653 回答
2

改变你stringOfList

    let stringOfList f l = 
         let str = sepConcat  "; " (List.map f l) in
         "["^str^"]"

   # stringOfList string_of_int [1;2;3;4;5];;
   - : string = "[1; 2; 3; 4; 5]"
于 2012-10-27T10:53:15.953 回答