所以,我试图解决这个问题,
编写一个函数,将下一个字从字符列表中删除。该函数返回单词的元组作为字符列表和列表的其余部分。
e.g。 next [#“t”,#“h”,#“e”,#“”,#“c”,#“a”,#“t”] ==> ([#“那只猫”,#” ”…。]) : char list * char list
•如果列表为空,则返回两个空列表的元组
•如果列表以非字母开头,则返回空列表和列表的元组
•否则,从列表尾部继续下一个单词的其余部分,返回下一个单词的其余部分和列表尾部的其余部分的元组,放入原始列表的头部,即单词的头部,在单词的其余部分的前面,并返回整个单词列表和列表尾部的其余部分
•提示:使用带有元组模式的let来匹配其余单词的元组和列表尾部的其余部分
到目前为止我的方法: - 有趣的下一个[] =([],[])| next(x :: xs)= if x = chr 32 then([],(x :: xs))else ???
答案 0 :(得分:1)
我知道有点晚了,我不确定我是否理解正确,但这对我来说很好看:
fun next [] = ([], [])
| next (hd :: tl) =
if Char.isAlpha hd
then
let val (lst1, lst2) = next tl
in (hd :: lst1, lst2)
end
else ([], hd :: tl)
给定示例似乎正常工作:
- next (String.explode "the cat");
val it = ([#"t",#"h",#"e"],[#" ",#"c",#"a",#"t"]) : char list * char list
它始终将列表的头部分开,直到它到达第一个单词的末尾。然后它开始将这些头部收集到元组的第一个列表中。 希望它有所帮助。
问候,Špela