Sml 如何在标准ML中进行模式匹配?

Sml 如何在标准ML中进行模式匹配?,sml,Sml,我想使用模式匹配编写以下过程: fun sub1 ns = if null ns then [] else (hd ns) :: (sub1 (tl ns)); fun merge (xs, ys) = if null xs orelse null ys then [] else (hd xs, hd ys) :: merge (tl xs, tl ys) val example = merge ([1,2,3], [4,5,6]) (* [(1

我想使用模式匹配编写以下过程:

fun sub1 ns = if null ns then []
          else (hd ns) :: (sub1 (tl ns));
fun merge (xs, ys) =
    if null xs orelse null ys
    then []
    else (hd xs, hd ys) :: merge (tl xs, tl ys)

val example = merge ([1,2,3], [4,5,6])  (* [(1,4), (2,5), (3,6)] *)
其中
null
hd
tl
是:

fun null [] = true
  | null (_::_) = false;

fun hd (x::_) = x;

fun tl (_::xs) = xs;
到目前为止,我已经尝试过:

fun sub1.2 [] = []
  | sub1.2 (n::ns) = n :: sub1.2 ns;
上述方法不起作用。我发现以下语法错误:

2.1.sml:6.10 Error: syntax error: inserting  ASTERISK
2.1.sml:7.10 Error: syntax error: inserting  ASTERISK
2.1.sml:7.33 Error: syntax error: inserting  EQUALOP

同样,如何使用模式匹配编写
sub1
?谢谢

名称中不允许使用小数点;您必须删除或替换它们。

既然您找到了解决方案,请尝试使用模式匹配重写以下内容:

fun sub1 ns = if null ns then []
          else (hd ns) :: (sub1 (tl ns));
fun merge (xs, ys) =
    if null xs orelse null ys
    then []
    else (hd xs, hd ys) :: merge (tl xs, tl ys)

val example = merge ([1,2,3], [4,5,6])  (* [(1,4), (2,5), (3,6)] *)

您可能需要不止一个基本大小写,但它们看起来可能非常相似。

您能详细说明它是如何工作的吗?@ScottHunter我添加了我遇到的语法错误。请尝试删除/替换函数名中的小数点。@ScottHunter谢谢;成功了!