我正在尝试交换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;
有什么建议吗?
答案 0 :(得分:1)
您的代码存在一些问题。
首先,你不能在函数定义中有一个本地声明。函数体必须是表达式,local ... in .. end
是声明。在这种情况下,您必须使用let ... in .. end
,这是一个表达式。
请注意,您不能在let-expression的in ... end
部分中使用值声明。在这里,您必须在let ... in
部分中移动所有值声明。
更清楚一点,let和local的形式是:
<atexp> ::= let <dec> in <exp_1> ; ... ; <exp_n> end
<dec> ::= local <dec_1> in <dec_2> end
因此,通常本地就像这样使用
local
fun foo ...
val ....
in
fun swap ...
end
其中let就像这样使用
fun swap ...
let
val ...
in
..
end