自定义数据类型作函数参数:调用MultiFunc时遇类型不匹配错误
解决SML中代数数据类型的参数匹配问题
我一眼就看出问题所在啦——你调用函数的时候没把参数用对应的构造器包装起来!
先理清楚核心逻辑:
你声明的Arguments是一个代数数据类型,RealTriple、IntPair、StringSingle都是它的构造器,作用是把原始数据(比如三元组、二元组)打包成Arguments类型的实例。而MultiFunc的参数类型明确是Arguments,它只认被构造器包裹后的实例,不认原始的元组或字符串。
你现在写的MultiFunc(1.0,2.0,3.0),相当于直接传了一个real * real * real类型的三元组,但函数期望的是Arguments类型的RealTriple(1.0,2.0,3.0),类型不匹配自然就报错了。
正确的调用方式
把参数用对应的构造器包起来就行:
MultiFunc(RealTriple(1.0, 2.0, 3.0));
同理,调用其他分支也要遵循这个规则:
- 整数二元组分支:
MultiFunc(IntPair(2, 3)); - 字符串分支:
MultiFunc(StringSingle("hello"));
验证效果
修正后调用MultiFunc(RealTriple(1.0, 2.0, 3.0)),会返回RealNum 2.0,完全符合你写的求平均值逻辑。
本质上,SML的代数数据类型构造器就像一个“身份包装器”,只有用它把原始数据打包成自定义类型的实例,函数才能识别并匹配对应的分支逻辑~
内容的提问来源于stack exchange,提问作者user1767774
相关产品推荐
相关产品推荐

