Update Num.md

This commit is contained in:
Shunsuke Shibayama 2022-10-02 01:45:57 +09:00
parent 71febb5ab6
commit 07651adb58

View file

@ -4,17 +4,15 @@
始めに用語の再確認をします。 始めに用語の再確認をします。
`A <: B`型Aは型Bの部分型宣言(subtype declaration)を表します。またこの時の型Aを部分型(subtype)、型Bを汎化型(supertype)と言います。更に、`A <: B`ならば型Aを持つ全ての式は型Bをの特性を持ちます。これを包摂(subsumption)と言います `A <: B`「型Aによる型Bの部分型宣言(subtype declaration)」を表します。またこの時の型Aを部分型(subtype)、型Bを汎化型(supertype)と言います。`A <: B`であるとき、型Aを持つ全ての式は型Bをの特性を持ちます。これは、形式的には`∀x: A (x: B)`を意味します(これはErgの有効な式ではありません)
Erg組み込み数値型の型関係は以下のようになります。 Erg組み込み数値型の型関係は以下のようになります。
- 真偽値型(Bool) <: 自然数型(Nat) <: 整数型(Int) <: 有理数型(Ratio) <: 複素数型(Complex) - 真偽値型(Bool) <: 自然数型(Nat) <: 整数型(Int) <: 有理数型(Ratio) <: 複素数型(Complex)
これにより数値計算する際には型が指定されていなければ、それぞれの型が部分型であればアップキャスト(ダウンキャスト)されます。 また、指数リテラルは有理数リテラルの別表現であり、型としては同一になります。
指数リテラルは有理数リテラルの別表現であり、型としては同一になります。
> __Note__: 現在の実装では浮動小数クラスは独立したクラスとしては存在しておらず有理数リテラルと同じ実装になっています。将来的にはこの浮動小数クラスは高速計算用に独立したクラスとして再実装されます。 計算する際には、適宜アップキャスト(ダウンキャスト)が行われます。
> また、複素数オブジェクトもまた現在浮動小数オブジェクトを使って実装されているため、同様に将来的には有理数リテラルによって書き直されます。
```python ```python
>>> 1 + 1.0 # Nat(Int)+Ratioの型はRatio+Ratio型にアップキャストされる >>> 1 + 1.0 # Nat(Int)+Ratioの型はRatio+Ratio型にアップキャストされる
@ -25,8 +23,8 @@ Erg組み込み数値型の型関係は以下のようになります。
True True
``` ```
型を指定していなければ、同じ型同士になるようにアップキャストされるように型が推論されます。 > __Note__: 現在の実装では浮動小数クラスは独立したクラスとしては存在しておらず有理数リテラルと同じ実装になっています。将来的にはこの浮動小数クラスは高速計算用に独立したクラスとして再実装されます。
一般的に、ダウンキャストは安全ではなく、変換方法も自明でありません > また、複素数オブジェクトもまた現在浮動小数オブジェクトを使って実装されているため、同様に将来的には有理数リテラルによって書き直されます
クラス同士のキャストは、後から定義しなおすことはできません。クラスを定義した際に継承でスーパークラスを指定した場合のみキャスト対象になります。 クラス同士のキャストは、後から定義しなおすことはできません。クラスを定義した際に継承でスーパークラスを指定した場合のみキャスト対象になります。
また、トレイトも基本的にクラス定義時に「実装」しなければトレイトの部分型付けすることができません。ただしこれは、[パッチ](../../../syntax/type/07_patch.md)を使うことで部分型付けとして見做すことができます。 また、トレイトも基本的にクラス定義時に「実装」しなければトレイトの部分型付けすることができません。ただしこれは、[パッチ](../../../syntax/type/07_patch.md)を使うことで部分型付けとして見做すことができます。
@ -34,6 +32,8 @@ True
共変な複合リテラルである配列リテラルなどは包摂関係にある場合にはキャスティングすることができます。 共変な複合リテラルである配列リテラルなどは包摂関係にある場合にはキャスティングすることができます。
しかし、非変性を持つ型はergでは包摂関係にあってもキャストすることができないので注意が必要です(詳細は[変性](../../../syntax/type/advanced/variance.md)を参照してください)。 しかし、非変性を持つ型はergでは包摂関係にあってもキャストすることができないので注意が必要です(詳細は[変性](../../../syntax/type/advanced/variance.md)を参照してください)。
そして、ComplexはNumトレイトのサブクラスです。すなわち、Numは「数」全体を表すトレイトです。
## 定義 ## 定義
```python ```python