标准 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