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谢谢;成功了!