我目前拥有的代码就是我正在测试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"
答案 0 :(得分:2)
你没有做错任何事,代码中没有添加方括号字符的地方。
我会说方括号是另一个标点符号,就像你的sep
参数一样。您可能希望在某个级别将它们作为附加参数传递。似乎可以将它们作为参数添加到sepConcat
- 然后它将处理所有标点符号。
修改:将sep
作为不同的值传递不会有帮助。分隔符在字符串之间。根据您的描述,您希望额外的括号绕过结果的外部。不是分隔符。
修改:"
字符不属于字符串。它们是OCaml向您展示值为字符串的方式。
# let x = "a";;
val x : string = "a"
# x;;
- : string = "a"
# String.length x;;
- : int = 1
#
解释器打印时,任何字符串值都会在其周围。所以方括号不可能在它们之外!
答案 1 :(得分: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]"