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]];

这些额外的提示非常有用。