Sml 倒车';列表->';b列表列表,但获取模式匹配并非详尽无遗
本作业从Sml 倒车';列表->';b列表列表,但获取模式匹配并非详尽无遗,sml,Sml,本作业从导入到使用sml 5.14编程 这是我的代码,但我得到的消息是,在基本情况下,模式匹配并不详尽 fun revrev [] = [[], []] | revrev [x::xs,y::ys] = revrev[ys@[y], xs @ [x]]; val test1revrev = revrev [[1, 2],[3, 4, 5]]; From valtest1 I want the output [[5, 4, 3], [2, 1]] 我不明白为什么我的函数不起作用,可能需
导入到使用sml 5.14编程
这是我的代码,但我得到的消息是,在基本情况下,模式匹配并不详尽
fun revrev [] = [[], []]
| revrev [x::xs,y::ys] = revrev[ys@[y], xs @ [x]];
val test1revrev = revrev [[1, 2],[3, 4, 5]];
From valtest1 I want the output [[5, 4, 3], [2, 1]]
我不明白为什么我的函数不起作用,可能需要一些了解
例如,这是有效的
fun rev [] = []
| rev (x::xs) = rev1 xs @ [x];
val test1rev = rev [1, 2, 3];
I get [3, 2, 1]
模式匹配不是穷举的,因为您只匹配空列表或包含两个元素的列表
我认为这项工作的目的是根据以前引入的rev
实施rev
。以下是一些提示:
- 基本情况是空列表。您只需返回一个空列表
- 感应外壳与非空列表
x::xs
匹配。与rev
的实现类似,您可以在xs
上调用rev
,并在末尾放置x
的转换。这一次您需要使用rev
,这样x
本身也会反转
编辑:
您的函数在一般情况下不起作用。我的意思是以下骨架:
fun revrev [] = []
| revrev (x::xs) = ...
其中x
也是一个列表。由于此函数非常类似于rev
,我希望您可以自己填写…
。模式匹配并不详尽,因为您只匹配空列表或两个元素的列表
我认为这项工作的目的是根据以前引入的rev
实施rev
。以下是一些提示:
- 基本情况是空列表。您只需返回一个空列表
- 感应外壳与非空列表
x::xs
匹配。与rev
的实现类似,您可以在xs
上调用rev
,并在末尾放置x
的转换。这一次您需要使用rev
,这样x
本身也会反转
编辑:
您的函数在一般情况下不起作用。我的意思是以下骨架:
fun revrev [] = []
| revrev (x::xs) = ...
其中x
也是一个列表。由于此函数非常类似于rev
,我希望您可以自己填写…
。最终解决了它。。。他放弃了,因为它“看起来”很高级,但当代码真正变得足够简单易懂时。又是Thx
fun rev [] = []
| rev (x::xs) = rev xs @ [x];
val test1rev1 = rev [1, 2, 3] = [3, 2, 1];
fun revrev [] = []
| revrev (x::xs) = revrev xs @ [rev x];
val test1revop = revop [[1, 2], [3, 4, 5]] = [[5, 4, 3], [2, 1]];
终于解决了。。。他放弃了,因为它“看起来”很高级,但当代码真正变得足够简单易懂时。又是Thx
fun rev [] = []
| rev (x::xs) = rev xs @ [x];
val test1rev1 = rev [1, 2, 3] = [3, 2, 1];
fun revrev [] = []
| revrev (x::xs) = revrev xs @ [rev x];
val test1revop = revop [[1, 2], [3, 4, 5]] = [[5, 4, 3], [2, 1]];
这些额外的提示非常有用。