Wikipedia's list of programming languages with algebraic data types (ADTs)は、本当にRustにADTがあることを示唆していますが、これがRustに当てはまる理由についての私の解釈が正しいかどうかはわかりません。Rust型システムが代数データ型(ADT)をサポートすることを示す方法は?
値: - ルスト!
) - 何の値を取得していないタイプ
- ゼロ(またはボイド)私はそれを理解し、そのいずれかを言うために、1つを持っている必要のADTを持っています。
- 1つ(またはユニット) -
()
はRustにあります) - 1つの値を取得するタイプ:()
。
操作:
- 添加 - Rustの
enum { A, B }
からA
の値またはB
の値を返すことができ、操作。 - 倍音 -
A
とB
のすべての組み合わせを返すことができる錆 - 操作のタプル(A, B)
。
ルール:
a + b = b + a
:enum { A, B } =~ enum { B, A }
a * b = b * a
:(A, B) =~ (B, A)
0 + x = x
:enum { !, A } =~ enum { A }
- :
(!, A) =~ !
1 * x = x
:((), A) =~ A
0 * x = 0
ここA =~ B
はfn(A) -> B
とfn(B) -> A
があることを意味するには、錆の型システムは、真のADTをサポート、または私はそれについて何かが足りないか、誤解していますなぜのための上記の私の記述ですか?
'!'は実際には安定したRustの型ではありませんが、空の 'enum'を"ゼロ "型として使うことができます。私はゼロ型は、言語が代数的データ型を持つ必要があるとは思わないが、つまり、あなたの質問は何ですか? – interjay
私の実際の質問は編集の1つで削除されました。それは今戻っている。 –
あなたの実際の質問は削除されていませんでした*、それは質問の回答サイトに所属する投稿のタイトルに移動されました。 「錆の代数データ型」のような名詞の束は適切な質問ではありません。それ以来、あなたはタイトルを変更しています(それは問題を残しているので、それは良いことです)。 – Shepmaster