我正在尝试用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说它需要一个整数列表列表,但我只给它一对整数列表?
我在这里有点失落所以任何帮助都会非常感激。
谢谢, bclayman
答案 0 :(得分:4)
你的第二个案子是错的;你想要
fun flipAlternate(nil) = nil
| flipAlternate([x]) = [x]
| flipAlternate(x::y::xs) = y::x::flipAlternate(xs);
SML正在研究第二种情况并得出结论
flipAlternate :: 'z list list -> 'z list
与第三种情况下的递归不兼容。
编辑:它知道结果是第一种情况下的list
,并且结论该参数比第二种情况的结果多一个list
。