我必须编写一个SML函数,该函数返回一个句子,该句子由给定列表中的空格分隔 . 我必须使用foldl / foldr / map函数中的至少一个 .
这就是我写的:
fun add_spaces nil = ""
| add_spaces(x::xs) = foldr (fn (x,xs) => (add_spaces x)^" "^xs) x [xs];
add_spaces(["Testing","function","with","this","sentence"]);
但是这个函数会带来一个反向的字符串(用函数Testing来判断它) . 我在互联网上读到可以通过反转列表来解决(在这种情况下是[xs]对吗?)但是我该怎么做呢?
谢谢
1 回答
你的函数
add_spaces
以一种非常复杂但可能被误解的方式使用foldr
.一个常规的递归函数,它不符合使用foldl / foldr / map的标准,是
依赖折叠进行递归的类似函数将遵循一种模式,
其中
...
显式不引用add_spaces
. 因此,您至少有两种工具来指导物品到达的顺序 . 一个是您在上述模板中的匿名函数中引用s
和res
的顺序,另一个是您选择的foldl
和foldr
.另请注意
foldl
和foldr
将从不同方向遍历列表;分别从左边和右边 . 为了说明顺序,尝试使用会产生副作用的东西进行折叠并查看哪些效果首先到达: