我正在尝试声明一个函数,字符串列表 - >字符串,例如输入
["Chicago","city","USA"]
应该返回"Chicago city USA"
。到目前为止我做的是:
fun gather ts = foldr op ^ "" ts;
这似乎有些沿袭,但问题是,我想在单词之间加入空格,因为这个函数会返回"ChigagocityUSA"
。
答案 0 :(得分:4)
是的,问题是^
是一个函数,对于两个字符串“foo”和“bar”返回“foobar”,尽管你想要“foo bar”。
所以你需要做的是定义一个带有两个字符串参数(作为元组)的函数,并返回两个字符串,它们之间有一个空格(所以string1 ^ " " ^ string2
)。
然后,您可以将该函数作为foldr
的参数提供,并获得您想要的结果。
答案 1 :(得分:0)
使用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
-