2

関数、文字列リスト->文字列を宣言しようとしています。たとえば、入力を使用すると、 ["Chicago","city","USA"]が返されます"Chicago city USA"。私がこれまでにしたことはこれでした:

fun gather ts = foldr op ^ "" ts;

これはやや線に沿っているように見えますが、問題は、この関数がを返すので、単語の間にスペースを含めたいということ"ChigagocityUSA"です。

4

2 に答える 2

5

はい、問題は、^「foo bar」が必要なのに、2つの文字列「foo」と「bar」に対して「foobar」を返す関数であるということです。

したがって、実行する必要があるのは、2つの文字列引数を(タプルとして)受け取り、間にスペースを入れて(so string1 ^ " " ^ string2)2つの文字列を返す関数を定義することです。

次に、その関数を引数として指定しfoldr、必要な結果を得ることができます。

于 2010-10-10T12:59:48.407 に答える
0

とを使用hdtlて、の初期値を取得しますfold。これにより、結果に先頭または末尾の空白文字が含まれることを回避できます。 foldl左から右に考えたい場合に便利です。

意味:

fun gather xs = 
      foldl (fn (x,acc) =>
                acc  ^ " " ^ x) (hd xs) (tl xs)

使用法:

- gather ["what", "is", "this", "gather"];
val it = "what is this gather" : string
- 
于 2010-10-13T04:00:27.963 に答える