实现解压缩功能时出错

时间:2013-05-14 13:03:06

标签: sml smlnj

我想实现一个函数,它获取一个元组列表(大小为2)并产生两个单独列表的元组。

我试过那段代码:

fun unzip [] = ([],[])
  | unzip [(a,b)] = ([a],[b])
  | unzip (a,b)::ps =   (a::(#1(unzip(ps))),(b::(#2(unzip(ps))));

但是它没有编译,sml在prompt =

中给了我

1 个答案:

答案 0 :(得分:1)

最后需要额外的)来关闭管道。 需要( (a,b)::ps )。不知何故,SML认为模式是unzip (a, b),然后处理::与描述模式不同。我仍然不知道何时或为什么SML需要它需要的一些括号,但在正确的地方添加更多似乎可以解决很多错误。

您的版本,包含语法修复程序。 (注意,我只修复了语法,我没有对可能的代码进行其他改进。)

fun unzip [] = ([],[])
  | unzip [(a,b)] = ([a],[b])
  | unzip ((a,b)::ps) =   (a::(#1(unzip(ps))),(b::(#2(unzip(ps)))))