Error handling SML操作数和运算符don的循环错误';我不同意
我试图在sml中为插入排序编写一个尾部递归代码,为此我创建了一个累加器“acc”,但在第5行acc=acc::h中给出了以下错误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
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
-