0

我正在尝试交换 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;

有什么建议么?

4

1 回答 1

1

您的代码存在一些问题。

首先,您不能在这样的函数定义中使用本地声明。函数的主体必须是一个表达式,并且local ... in .. end是一个声明。在这种情况下,您必须使用let ... in .. end,这是一个表达式。

请注意,您不能在in ... endlet 表达式的部分中声明值。在这里,您必须将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
于 2013-03-29T15:18:33.950 回答