0

マルチ リストのデータ型を定義します。 datatype intnest= INT of int | LIST of intnest list; 現在、この型をメイン型に変換できる関数を作成しようとしています。

例: [INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]] どうすればこれを行うことができますか? 助けてくれてありがとう

4

1 に答える 1

1

前の質問を参照すると、できません。

私が説明しようとしたように: SML でそのような値を持つことは不可能です!

インタープリターで試してみてください

- val _ = [1,2, [6,8]];
stdIn:28.9-28.21 Error: operator and operand don't agree [literal]
  operator domain: int * int list
  operand:         int * int list list
  in expression:
    2 :: (6 :: 8 :: nil) :: nil

シンタックス シュガーの代わりに基本的な構成要素を使用してリストを作成すると、リストは次のように[1,2,3]なります。1 :: 2 :: 3 :: nil

ここで、2 つの「構成要素」である cons と nil の型を見てみましょう。

- op::;
val it = fn : 'a * 'a list -> 'a list
- nil;
val it = [] : 'a list

'a次に、中置演算子 cons が、左側に type の引数を取り、'a右側にリストを取ることがわかります。
したがって、int のリストを作成する場合、左側に int を、右側に int のリストを指定する必要があることがわかります (上の例のように)。このことから、次のようなことはできないことが明らかです。

[1, 2] :: 3 :: nil

これはと同等です(1 :: 2 :: nil) :: 3 :: nil

于 2013-04-05T12:31:54.663 に答える