标准 ML:运算符和操作数不一致(圆度)
Standard ML: Operator and Operand Don't Agree (Circularity)
我正在尝试用 SML 编写一个函数来翻转列表的备用元素。这是我的函数:
fun flipAlternate(nil) = nil
| flipAlternate([x]) = x
| flipAlternate(x::y::xs) = y::x::flipAlternate(xs);
当我在交互式解释器中使用我的文件 (Ullman.sml) 时,出现编译错误:
- use "Ullman.sml";
[opening Ullman.sml]
Ullman.sml:5.31-5.54 Error: operator and operand don't agree [circularity]
operator domain: 'Z list * 'Z list list
operand: 'Z list * 'Z list
in expression:
x :: flipAlternate xs
所以 SML 说它需要一个整数列表列表,但我只给它一对整数列表?
我在这里有点迷路所以任何帮助将不胜感激。
谢谢,
克莱曼
你的第二种情况是错误的;你要
fun flipAlternate(nil) = nil
| flipAlternate([x]) = [x]
| flipAlternate(x::y::xs) = y::x::flipAlternate(xs);
SML正在研究第二种情况并得出结论
flipAlternate :: 'z list list -> 'z list
这与第三种情况的递归不兼容。
编辑:它知道第一种情况的结果是 list
,并得出结论,该参数比第二种情况的结果多 list
。
我正在尝试用 SML 编写一个函数来翻转列表的备用元素。这是我的函数:
fun flipAlternate(nil) = nil
| flipAlternate([x]) = x
| flipAlternate(x::y::xs) = y::x::flipAlternate(xs);
当我在交互式解释器中使用我的文件 (Ullman.sml) 时,出现编译错误:
- use "Ullman.sml";
[opening Ullman.sml]
Ullman.sml:5.31-5.54 Error: operator and operand don't agree [circularity]
operator domain: 'Z list * 'Z list list
operand: 'Z list * 'Z list
in expression:
x :: flipAlternate xs
所以 SML 说它需要一个整数列表列表,但我只给它一对整数列表?
我在这里有点迷路所以任何帮助将不胜感激。
谢谢, 克莱曼
你的第二种情况是错误的;你要
fun flipAlternate(nil) = nil
| flipAlternate([x]) = [x]
| flipAlternate(x::y::xs) = y::x::flipAlternate(xs);
SML正在研究第二种情况并得出结论
flipAlternate :: 'z list list -> 'z list
这与第三种情况的递归不兼容。
编辑:它知道第一种情况的结果是 list
,并得出结论,该参数比第二种情况的结果多 list
。