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

に変更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 に答える
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 に答える