0

ML のリスト内の要素を交換しようとしています。私の swap 関数は、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 ... endただし、let 式の一部に値宣言を含めることはできないことに注意してください。ここでは、パーツ内のすべての値宣言を上に移動する必要があります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 に答える