模式匹配 – 未解析的flex记录(需要知道此上下文中所有字段的名
我一直在尝试使用元组列表作为参数创建一个函数,但我不断收到错误:“未解析的flex记录(需要知道此上下文中所有字段的名称)”我的代码是:
fun convert d = ( (map (#1) d),(map (#2) d) ); 这是基本上尝试将对列表转换为一对列表.我还尝试将d的类型声明为:(‘a *’b)列表,但这导致更多错误. 解决方法
我怀疑你在注释d类型时遇到的问题实际上就是你没有用parens包围注释,这对我有用:
fun convert (d : ('a * 'b) list) = ( (map (#1) d),(map (#2) d) ) 但是,这并不是很好的SML风格.使用#1,#2,#n等等有点气馁,因为它会导致类似这样的问题,你失去了类型推断给你的一些常见的难度. 相反,您可以为对定义一些显式选择函数: fun first (a,_) = a fun second (_,b) = b fun convert d = (map first d,map second d) (请注意,我还从转换体中删除了一些多余的括号,因为函数应用程序具有比元组构造更高的优先级,并且我还删除了在对命令式代码进行排序或键入代码时才真正需要的分号进入REPL) This是标准ML的一个非常好的风格指南,来自哈佛大学(或者塔夫茨大学)的课程.该文档的旧版本在“要避免的常见错误”中明确提到了这一点.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |