在SML中插入相等错误

在SML中插入相等错误,sml,smlnj,Sml,Smlnj,我试图交换ML中列表中的元素。我的交换函数返回插入EQUALOP时的错误 fun swap(n:int, i:int, deck:card list) = local val card1_removed = nth(deck,i) val card2_removed = nth(deck,n) in val dec

我试图交换ML中列表中的元素。我的交换函数返回插入EQUALOP时的错误

fun swap(n:int, i:int, deck:card list) =
                local
                    val card1_removed = nth(deck,i)
                    val card2_removed = nth(deck,n)
                in
                    val deck = remove(deck,i)
                    val deck = remove(deck,n)
                    val deck = insert_at(deck,n,card1_removed)
                    val deck = insert_at(deck,i,card2_removed)
                    print_cards(deck);
                end;

有什么建议吗?

您的代码有一些问题

首先,在这样的函数定义中不能有局部声明。函数体必须是表达式,
local。。。在里面end
是一个声明。在这种情况下,您必须使用
let。。。在里面end
,这是一个表达式

请注意,在中的
中不能有值声明。。。结束
不过是let表达式的一部分。在这里,您必须将
let中的所有值声明向上移动。。。在
部分中

更清楚一点,let和local的形式是:

<atexp> ::= let <dec> in <exp_1> ; ... ; <exp_n> end 

<dec>   ::= local <dec_1> in <dec_2> end
在哪里像这样使用let

local 
  fun foo ...
  val ....
in 
  fun swap ...
end
fun swap ...
  let
    val ...
  in
    ..
  end