我想实现一个函数,它获取一个元组列表(大小为2)并产生两个单独列表的元组。
我试过那段代码:
fun unzip [] = ([],[])
| unzip [(a,b)] = ([a],[b])
| unzip (a,b)::ps = (a::(#1(unzip(ps))),(b::(#2(unzip(ps))));
但是它没有编译,sml在prompt =
中给了我答案 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)))))