関数、文字列リスト->文字列を宣言しようとしています。たとえば、入力を使用すると、
["Chicago","city","USA"]
が返されます"Chicago city USA"
。私がこれまでにしたことはこれでした:
fun gather ts = foldr op ^ "" ts;
これはやや線に沿っているように見えますが、問題は、この関数がを返すので、単語の間にスペースを含めたいということ"ChigagocityUSA"
です。
関数、文字列リスト->文字列を宣言しようとしています。たとえば、入力を使用すると、
["Chicago","city","USA"]
が返されます"Chicago city USA"
。私がこれまでにしたことはこれでした:
fun gather ts = foldr op ^ "" ts;
これはやや線に沿っているように見えますが、問題は、この関数がを返すので、単語の間にスペースを含めたいということ"ChigagocityUSA"
です。
はい、問題は、^
「foo bar」が必要なのに、2つの文字列「foo」と「bar」に対して「foobar」を返す関数であるということです。
したがって、実行する必要があるのは、2つの文字列引数を(タプルとして)受け取り、間にスペースを入れて(so string1 ^ " " ^ string2
)2つの文字列を返す関数を定義することです。
次に、その関数を引数として指定しfoldr
、必要な結果を得ることができます。
とを使用hd
しtl
て、の初期値を取得します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
-