Error handling SML操作数和运算符don的循环错误';我不同意

Error handling SML操作数和运算符don的循环错误';我不同意,error-handling,compiler-errors,smlnj,Error Handling,Compiler Errors,Smlnj,我试图在sml中为插入排序编写一个尾部递归代码,为此我创建了一个累加器“acc”,但在第5行acc=acc::h中给出了以下错误 fun insert R x [] acc = [x] | insert R x (h::t) acc = if R (x,h) then acc::(x::(h::t)) else( acc=acc::h; insert R x t acc ); fun isort_aux R [] acc

我试图在sml中为插入排序编写一个尾部递归代码,为此我创建了一个累加器“acc”,但在第5行acc=acc::h中给出了以下错误

    fun insert R x [] acc = [x]
  | insert R x (h::t) acc =
    if R (x,h) then acc::(x::(h::t))
    else(
        acc=acc::h;
        insert R x t acc
        );
fun isort_aux R [] acc = acc
  | isort_aux R (x::xs) acc =
    isort_aux xs (insert R x acc [])
fun isort_2 R xs = isort_aux R xs []

acc=acc::h; 插入R x t acc

在这里有两个电话在SML中不起作用。由于语言的结构方式,在SML中只能做一件事。我在几周前开始使用SML时就这样做了,但这对我来说并不管用

正如@moldbnilo的评论所说,您的代码试图将acc与acc::h进行比较,而不是将其设置为acc


我对SML非常陌生,所以请恕我直言,因为它可能不正确。

acc=acc::h
是一个比较,你不能将
h
acc
放在一起。您可能应该回顾SML的基础知识,并从明确地写下类型开始。
Standard ML of New Jersey v110.78 [built: Thu Aug 31 03:45:42 2017]
- stdIn:5.3-5.13 Error: operator and operand don't agree [circularity]
  operator domain: 'Z * 'Z list
  operand:         'Z * 'Z
  in expression:
    acc :: h
-