マルチ リストのデータ型を定義します。
datatype intnest= INT of int
| LIST of intnest list;
現在、この型をメイン型に変換できる関数を作成しようとしています。
例:
[INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]]
どうすればこれを行うことができますか? 助けてくれてありがとう
マルチ リストのデータ型を定義します。
datatype intnest= INT of int
| LIST of intnest list;
現在、この型をメイン型に変換できる関数を作成しようとしています。
例:
[INT 1, INT 2, LIST[INT 6, INT 8]] => [1,2, [6,8]]
どうすればこれを行うことができますか? 助けてくれてありがとう
前の質問を参照すると、できません。
私が説明しようとしたように: 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