2013-05-14 41 views
-1

我想实现一个函数,它获取一个元组列表(大小为2)并产生一个包含两个单独列表的元组。实现解压缩函数时出错

我试过代码:

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

不过,这并不编译中,SML给我的提示=末

+0

首先,你有不平衡的括号。 – 2013-05-14 16:41:37

回答

1

需要额外)关闭tubple。 需要((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)))))