如何修复Standard ML代码中出现的未绑定类型'a'错误?
问题分析与解决
你遇到的错误是因为Standard ML(SML)中类型变量必须以撇号(')开头,你代码里的a和b会被编译器当作未定义的具体类型,而非多态类型变量,所以报"Unbound type 'a'"错误。
修正后的代码
fun seconds (pairs : ('a * 'b) list) : 'a list = let fun first (pair : 'a * 'b) : 'a = fst pair in map first pairs end; val pairs = [("m", false), ("w", false), ("n", true)]; val result = seconds pairs;
关键修改点
- 所有类型变量前添加撇号:把
a改为'a,b改为'b,让编译器识别为多态类型参数,支持任意类型的配对列表。 - 额外提示:你的函数实际返回的是配对的第一个元素列表,函数名
seconds有点名不符实,改成firsts会更直观,不过这只是命名规范问题,不影响功能。
运行结果
修正后执行代码,result会得到["m", "w", "n"],符合预期。
内容的提问来源于stack exchange,提问作者Moises4
相关产品推荐
相关产品推荐

