在SML中使用foldr连接字符串

时间:2010-10-10 12:55:24

标签: string concatenation sml fold

我正在尝试声明一个函数,字符串列表 - >字符串,例如输入 ["Chicago","city","USA"]应该返回"Chicago city USA"。到目前为止我做的是:

fun gather ts = foldr op ^ "" ts;

这似乎有些沿袭,但问题是,我想在单词之间加入空格,因为这个函数会返回"ChigagocityUSA"

2 个答案:

答案 0 :(得分:4)

是的,问题是^是一个函数,对于两个字符串“foo”和“bar”返回“foobar”,尽管你想要“foo bar”。

所以你需要做的是定义一个带有两个字符串参数(作为元组)的函数,并返回两个字符串,它们之间有一个空格(所以string1 ^ " " ^ string2)。

然后,您可以将该函数作为foldr的参数提供,并获得您想要的结果。

答案 1 :(得分: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
-