SML报operator is not a function错误:第4行代码问题原因咨询
SML代码报错原因及修正
核心错误原因
- 首先看
repeat的类型签名:int -> ('a -> 'a) -> 'a -> 'a,它需要3个按顺序传入的参数:重复次数(整数)、待重复执行的单参数函数、函数执行的初始值。 - 你第四行代码
fun times x y = repeat( x (plus( x y)) x)触发报错的直接原因是:SML中函数调用的优先级最高,代码中x (plus(x y))会被解析为「将int类型的变量x作为函数调用,传入plus(x y)的结果作为参数」,但x是整数不是函数,完全符合报错信息中operator: int的类型不匹配提示。 - 此外逻辑层面你对乘法的实现思路也有偏差:整数乘法
x * y本质是把「加y」这个操作重复执行x次,初始值设为0,和你目前传入的参数逻辑完全不符。
修正后的代码
正确的times函数写法如下:
fun times x y = repeat x (plus y) 0;
你可以测试times 3 4,会得到预期结果12。
内容的提问来源于stack exchange,提问作者Dollardudez
相关产品推荐
相关产品推荐

