2016-06-26 3 views
1

マニュアルに特定の情報が見つかりませんでした。 NimにANY、NONE、型単位がどのように反映されているかを誰でも明確にすることができますか?NY、NONE、Unit in Nim

短い定義 - ユニットタイプは、1つの値のみを許可する(したがって、情報を保持することができない)タイプです。ユニットタイプに関連付けられているキャリア(基本セット)は、任意のシングルトンセットにすることができます。そのような2つのセットの間には同形があるので、ユニットタイプについて話し、その値の詳細を無視するのが通例です。ユニットタイプは、0タプルのタイプ、すなわちタイプのない製品であると考えることもできる。

ANY- ANYは、ALLまたはTopとも呼ばれ、汎用セットです。 (すべての可能な値)。

なし - "空のセット"

はありがとうございました!

+1

* ANY *、* NONE *(おそらく 'nil')と* type unit *の意味を明確にすることはできますか?あなたはタグ 'any'の説明を読んだことがありますか?あなたの質問に何もする必要はないようです。適切な答えを得るには、解決したい問題を記述する必要があります。 – flyx

+0

は定義を追加しました – BeH

答えて

2

あなたの質問はセットについてのようです。のは、見てみましょう:

​​

これはタイプint8の空のセットです。空のセットの{}リテラルは、暗黙的に実際のsetタイプにキャストされます。

let singletonSet = {1'i8} 

(私はそれを正しく理解すればユニットタイプ)これは、1つの値を含むセットです。セットのタイプは、その中の単一の値のタイプから自動的に導き出すことができます。

let completeSet = {low(int8) .. high(int8)} 

このセットはすべての可能な値を保持します。int8

組み込みのsetタイプはビットベクトルとして実装されているため、可能な値の小さなセットのみを保持できる値タイプ(int8の場合、ビットベクトルはすでに256ビットです)にのみ使用できます。 int8のほかに、通常はcharと列挙型に使用されます。

さらに大きいタイプを保持できるmodule setsHashSetがあります。しかし、可能なすべての値を含むHashSetを作成すると、メモリ消費量はおそらく膨大になります。

0

Nimは関数型言語ではなく、決して1つであると主張しません。これらの型に相当するものはありません。その解決策は、C++にとってもっと道に似ています。

ユニットに最も近いボイドがあります。 Any型は存在しませんが、型なしpointerがあります。しかし、その型は型情報を保持していないので、型をキャストできるかどうかを知る必要があります。そして、NONE、または、スカラーから私がそれをどのように知っているかについては、voidも使用しなければなりません。しかし、ここではnoReturnプラグマを追加できます。