String 在SML中将字符串与foldr连接

String 在SML中将字符串与foldr连接,string,concatenation,sml,fold,String,Concatenation,Sml,Fold,我试图声明一个函数,stringlist->string,以输入为例 [Chicago,city,USA]应该返回Chicago city USA。到目前为止,我所做的是: fun gather ts = foldr op ^ "" ts; 这似乎有些道理,但问题是,我想在单词之间加上空格,因为这个函数将返回ChigagocityUSA。是的,问题是,^是一个函数,对于两个字符串foo和bar,它返回foobar,尽管您需要foobar 因此,您需要定义一个函数,该函数将两个字符串参数作为元组

我试图声明一个函数,stringlist->string,以输入为例 [Chicago,city,USA]应该返回Chicago city USA。到目前为止,我所做的是:

fun gather ts = foldr op ^ "" ts;
这似乎有些道理,但问题是,我想在单词之间加上空格,因为这个函数将返回ChigagocityUSA。

是的,问题是,^是一个函数,对于两个字符串foo和bar,它返回foobar,尽管您需要foobar

因此,您需要定义一个函数,该函数将两个字符串参数作为元组,并返回两个字符串之间有空格的字符串,因此string1^^string2

然后,您可以将该函数作为参数提供给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
- 

我真的不能让它工作,我做了一个有趣的新函数hj ts=fna,b=>a^^b@用户:不知道ts是做什么用的,因为你不用它。你可以只做valhj=fna,b=>a^^b或funhj a,b=a^^b,两者相同,但更短。然后foldr hj ts,很好。啊,当然,非常感谢。有没有一个简单的方法来删除最后出现的空格?也许我可以用像fun-hj-a,a,b=>a^^b;,而不是fun-hj-a,b=>a^^b?是的,这是有效的,但是对于帮助伴侣,使用的是,而不是,uthanx: