الفرق بين المراجعتين لصفحة: «Ruby/Numeric»
لا ملخص تعديل |
جميل-بيلوني (نقاش | مساهمات) ط مراجعة وتدقيق. |
||
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة) | |||
سطر 1: | سطر 1: | ||
الصنف <code>Numeric</code> هو الصنف الذي يجب أن ترثه كل الأصناف العددية عالية المستوى. | الصنف <code>Numeric</code> هو الصنف الذي يجب أن ترثه كل الأصناف العددية عالية المستوى. | ||
__TOC__ | |||
يسمح الصنف <code>Numeric</code> | يسمح الصنف <code>Numeric</code> بتمثيل (instantiation) الكائنات المحجوزة في الكومة (heap-allocated objects). تُنفَّذ الأصناف العددية الأساسية الأخرى، مثل <code>[[Ruby/Integer|Integer]]</code>، كأصناف آنيَّة، أي أنّ كل عدد صحيح هو كائن غير قابل للتغيير (immutable)، والذي يُمرَّر دائمًا بقيمته. اطلع على المثال التالي:<syntaxhighlight lang="ruby"> | ||
a = 1 | a = 1 | ||
1.object_id == a.object_id #=> true | 1.object_id == a.object_id #=> true | ||
</syntaxhighlight> | </syntaxhighlight>لا يمكن أن يكون هناك إلا نسخة (instance) واحدة فقط من العدد الصحيح <code>1</code>. تضمن روبي بهذا منع إنشاء نسخ جديدة ومنع التكرار.<syntaxhighlight lang="ruby"> | ||
Integer.new(1) #=> NoMethodError: undefined method `new' for Integer:Class | Integer.new(1) #=> NoMethodError: undefined method `new' for Integer:Class | ||
1.dup #=> TypeError: can't dup Integer | 1.dup #=> TypeError: can't dup Integer | ||
سطر 11: | سطر 11: | ||
</syntaxhighlight>لهذا السبب، يجب استخدام الصنف <code>Numeric</code> عند تعريف أصناف عددية أخرى. | </syntaxhighlight>لهذا السبب، يجب استخدام الصنف <code>Numeric</code> عند تعريف أصناف عددية أخرى. | ||
يجب أن | يجب أن تنفِّذ الأصناف التي ترث من الصنف <code>Numeric</code> التابع [[Ruby/Numeric/coerce|<code>coerce</code>]]، والذي يعيد مصفوفة بعنصرين تحتوي على كائن مُحوّل (coerced) إلى نسخة من الصنف الجديد والكائن <code>self</code> (انظر توثيق التابع <code>[[Ruby/Numeric/coerce|coerce]]</code>). | ||
يجب أيضا على الأصناف الوراثة | يجب أيضا على الأصناف الوراثة أن تنفِّذ معاملات العمليات الحسابية (<code>+</code> ، <code>-</code> ، <code>*</code> و <code>/</code>) والمعامل <code><=></code> (انظر الصنف <code>[[Ruby/Comparable|Comparable]]</code>). قد تعتمد هذه التوابع على التابع <code>[[Ruby/Numeric/coerce|coerce]]</code> لضمان إمكانية التداخل (interoperability) مع نسخ الأصناف العددية الأخرى.<syntaxhighlight lang="ruby"> | ||
class Tally < Numeric | class Tally < Numeric | ||
def initialize(string) | def initialize(string) | ||
سطر 58: | سطر 58: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==توابع | ==توابع النسخ العامة (Public Instance Methods)== | ||
===[[Ruby/Numeric/ | === [[Ruby/Numeric/mod|<code>modulo</code>]]=== | ||
يعيد باقي قسم عدد على آخر. | |||
===[[Ruby/Numeric/ | === [[Ruby/Numeric/plus|<code>+</code>]]=== | ||
يمثِّل المعامل <code>+</code> الأحادي إشارة الزائد التي تسبق العدد لتشير إلى أنه عدد موجب. | |||
===[[Ruby/Numeric/ | === [[Ruby/Numeric/minus|<code>-</code>]]=== | ||
يمثِّل المعامل <code>-</code> الأحادي إشارة الناقص التي تسبق العدد لتشير إلى أنه عدد سالب. | |||
===[[Ruby/Numeric/ | === [[Ruby/Numeric/compar|<code><=></code>]]=== | ||
يوازن المعامل <code><=></code> بين عددين ثمَّ يعيد القيمة 0 إن كان هذان العددان متساويين، وإلا فسيُعيد القيمة<code>nil</code>. | |||
===[[Ruby/Numeric/abs | | ===[[Ruby/Numeric/abs |<code>abs</code>]]=== | ||
يعيد | يعيد القيمة المطلقة للعدد الذي استُدعي معه. | ||
===[[Ruby/Numeric/abs2 | | ===[[Ruby/Numeric/abs2 |<code>abs2</code>]]=== | ||
يعيد مربع العدد الذي استُدعي معه. | يعيد مربع العدد الذي استُدعي معه. | ||
===[[Ruby/Numeric/angle | | ===[[Ruby/Numeric/angle |<code>angle</code>]]=== | ||
يعيد | يعيد القيمة <code>0</code> إن كان العدد الذي استُدعي معه موجبًا، أو القيمة <code>[[Ruby/Math/PI|pi]]</code> خلاف ذلك. | ||
===[[Ruby/Numeric/arg | | ===[[Ruby/Numeric/arg |<code>arg</code>]]=== | ||
يعيد | يعيد القيمة <code>0</code> إن كان العدد الذي استُدعي معه موجبًا، أو القيمة <code>[[Ruby/Math/PI|pi]]</code> خلاف ذلك. | ||
===[[Ruby/Numeric/ceil | | ===[[Ruby/Numeric/ceil |<code>ceil</code>]]=== | ||
يعيد أصغر عدد | يعيد أصغر عدد من الأعداد الأكبر من أو تساوي العدد الذي استُدعي معه وبدقة محدَّدة. | ||
===[[Ruby/Numeric/clone |<code>clone</code>]]=== | |||
يعيد الكائن الذي استُدعي معه. | يعيد الكائن الذي استُدعي معه. | ||
===[[Ruby/Numeric/coerce |<code>coerce</code>]]=== | |||
إن كان <code>numeric</code> | إن كان العدد المُمرَّر إلى التابع <code>numeric</code> من نفس نوع العدد الذي استُدعي معه، فسيعيد مصفوفة تحوي هذين العددين. خلاف ذلك، سيحول هذين العددين إلى النوع <code>[[Ruby/Float|Float]]</code> ويعيدهما في مصفوفة. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/conj |<code>conj</code>]]=== | ||
يعيد | يعيد الكائن الذي استُدعي معه (الكائن <code>self</code>). | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/conjugate |<code>conjugate</code>]]=== | ||
يعيد | يعيد الكائن الذي استُدعي معه (الكائن <code>self</code>). | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/denominator |<code>denominator</code>]]=== | ||
يعيد المقام (denominator) للعدد الكسري الذي استدعي معه، ويكون دائمًا موجبًا. | |||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/div |<code>div</code>]]=== | ||
يستخدم المعامل <code>/</code> لإجراء عملية القسمة على العددين المعطيين، ثم يحوّل النتيجة إلى عدد صحيح. | |||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/divmod |<code>divmod</code>]]=== | ||
يعيد | يعيد مصفوفة تحتوي على حاصل (quotient) وباقي قسمة العدد الذي استُدعي معه على العدد المُمرَّر إليه. | ||
=== | ===[[Ruby/Numeric/dup |<code>dup</code>]]=== | ||
يعيد الكائن الذي استُدعي معه. | |||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/eql-3F |<code>eql?</code>]]=== | ||
يعيد | يتحقق إن كان العدد الذي استُدعي معه والعدد المُمرَّر إليه من نفس النوع ومتساويين. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/fdiv |<code>fdiv</code>]]=== | ||
يعيد | يجري عملية القسمة بين العدد الذي استدعي معه والعدد الذي مُرِّر إليه ثم يعيد الناتج في عدد <nowiki/>[[Ruby/Float|عشري]]. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/finite-3F |<code>?finite</code>]]=== | ||
يعيد | يتحقق إن كان العدد الذي استُدعي معه عددًا منتهيًا (finite). | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/floor |<code>floor</code>]]=== | ||
يعيد | يعيد أكبر عدد من الأعداد الأصغر من أو تساوي العدد الذي استُدعي معه وبدقة محدَّدة. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/i |<code>i</code>]]=== | ||
يعيد [[Ruby/Complex|العدد التخيلي]] (imaginary number) المقابل للعدد الذي استدعي معه. | |||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/imag |<code>imag</code>]]=== | ||
يعيد الصفر. | |||
===[[Ruby/Numeric/imaginary |<code>imaginary</code>]]=== | |||
يعيد الصفر. | |||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/infinite-3F |<code>infinite?</code>]]=== | ||
يعيد القيمة <code> | يتحقق إذا ما إن كان العدد الذي استدعي معه منتهيًا (finite) أو غير منتهي من الطرف السالب (<code>-Infinity</code>) أو غير منتهي من الطرف الموجب (<code>+Infinity</code>). | ||
=== | ===[[Ruby/Numeric/integer-3F |<code>integer?</code>]]=== | ||
يتحقق إن كان العدد الذي استُدعي معه من النوع <code>[[Ruby/Integer|Integer]]</code>. | |||
===[[Ruby/Numeric/magnitude |<code>magnitude</code>]]=== | |||
يعيد | يعيد القيمة المطلقة للعدد الذي استُدعي معه. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/modulo |<code>modulo</code>]]=== | ||
يعيد باقي قسم عدد على آخر. | |||
===[[Ruby/Numeric/negative-3F |<code>?negative</code>]]=== | |||
يتحقق إن كان العدد الذي استُدعي معه عددًا سالبًا. | |||
===[[Ruby/Numeric/ | ===<code rel="mw:WikiLink" href="Ruby/Numeric/nonzero-3F " title="Ruby/Numeric/nonzero-3F">[[Ruby/Numeric/negative-3F |?]][[Ruby/Numeric/nonzero-3F |nonzero]]</code>=== | ||
يعيد <code> | يعيد العدد الذي استُدعي معه إن كان غير صفري، أو يعيد القيمة <code>nil</code> خلاف ذلك. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/numerator |<code>numerator</code>]]=== | ||
يعيد البسط (numerator) للعدد الكسري الذي استدعي معه. | |||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/phase |<code>phase</code>]]=== | ||
يعيد | يعيد القيمة <code>0</code> إن كان العدد الذي استُدعي معه موجبًا، أو يعيد القيمة <code>[[Ruby/Math/PI|pi]]</code> خلاف ذلك. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/polar |<code>polar</code>]]=== | ||
يعيد | يعيد المصفوفة <code>[num.abs، num.arg]</code>، إذ <code>num</code> هو العدد الذي استدعي معه. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/positive-3F |<code>?positive</code>]]=== | ||
يتحقق إن كان العدد الذي استُدعي معه عددًا موجبًا. | |||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/quo |<code>quo</code>]]=== | ||
يعيد | يعيد ناتج القسمة الأكثر دقة (قيمة <nowiki/>[[Ruby/Rational|جذرية]] للأعداد الصحيحة، وقيمة <nowiki/>[[Ruby/Float|عشرية]] للأعداد العشرية). | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/real |<code>real</code>]]=== | ||
يعيد | يعيد العدد الذي استدعي معه (الكائن <code>self</code>). | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/real-3F |<code>real?</code>]]=== | ||
يعيد | يتحقق إن كان العدد الذي استُدعي معه عددًا حقيقيًّا (أي ليس من النوع <code>[[Ruby/Complex|Complex]]</code>). | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/rect |<code>rect</code>]]=== | ||
يعيد المصفوفة <code>[num, 0]</code> إذ <code>num</code> يمثل العدد الذي استُدعي معه. | |||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/rectangular |<code>rectangular</code>]]=== | ||
يعيد المصفوفة <code>[num, 0]</code> إذ <code>num</code> يمثل العدد الذي استُدعي معه. | |||
===[[Ruby/Numeric/remainder |<code>remainder</code>]]=== | |||
< | يعيد باقي قسم عدد على آخر. أي عندما يُستدعَى التابع بالشكل <code>x.remainder(y)</code>، فإنه يماثل الاستدعاء <code>x-y*(x/y).truncate</code>. | ||
===[[Ruby/Numeric/ | ===[[Ruby/Numeric/round |<code>round</code>]]=== | ||
يقرِّب العدد الذي استُدعي معه إلى أقرب قيمة بدقة محدَّدة. | |||
===[[Ruby/Numeric/step |<code>step</code>]]=== | |||
يستدعي الكتلة المعطاة مع تمرير سلسلة من الأعداد إليها بدءًا من العدد الذي استُدعي معه وحتى قيمة محدَّدة مع الزيادة أو الطرح بقدار خطوة ثابتة معطاة. | |||
===[[Ruby/Numeric/to_c |<code>to_c</code>]]=== | |||
يحول العدد الذي استُدعي معه إلى <nowiki/>[[Ruby/Complex|عدد عقدي]]. | |||
=== | ===[[Ruby/Numeric/to_int |<code>to_int</code>]]=== | ||
يستدعي التابع <code>to_i</code> الخاص بالصنف الفرعي (child class) لتحويل العدد الذي استُدعي معه إلى <nowiki/>[[Ruby/Integer|عدد صحيح]]. | |||
===[[Ruby/Numeric/truncate |<code>truncate</code>]]=== | |||
يعيد التابع <code>truncate</code> العدد الذي استُدعي معه بعد اقتطاع المنازل العشرية منه بمقدار محدَّد. | |||
===[[Ruby/Numeric/zero-3F |<code>zero?</code>]]=== | |||
يتحقق إن كانت قيمة العدد الذي استُدعي معه تساوي الصفر. | |||
== ملاحظات إضافية == | |||
الصنف <code>Numeric</code> هو صنفٌ أساسيٌ لأنواع الكائنات الأخرى العددية. اطلع مثلًا على الشيفرة التالية:<syntaxhighlight lang="ruby"> | |||
puts 100.class # Fixnum | |||
puts (100.2).class # Float | |||
puts (100**100).class # Bignum | |||
</syntaxhighlight>في بعض الحالات، تستبدل هذه الأصناف التوابع المعرَّفة في هذا الصنف. | |||
لفهم سلوك أنواع محدَّدة من الأعداد، انتقل إلى التوثيق المخصص بهم واطَّلع عليه. | |||
==مصادر<span> </span>== | ==مصادر<span> </span>== | ||
*[http://ruby-doc.org/core-2.5.1/ | *[http://ruby-doc.org/core-2.5.1/Numeric.html قسم الصنف Numeric في توثيق روبي الرسمي.] | ||
<noinclude>{{DISPLAYTITLE: | <noinclude>{{DISPLAYTITLE:الصنف <code>Numeric</code> في روبي}}</noinclude> | ||
[[تصنيف: Ruby]] | [[تصنيف: Ruby]] | ||
[[تصنيف: Ruby Class]] | |||
[[تصنيف: Ruby Numeric]] | [[تصنيف: Ruby Numeric]] |
المراجعة الحالية بتاريخ 20:25، 20 نوفمبر 2018
الصنف Numeric
هو الصنف الذي يجب أن ترثه كل الأصناف العددية عالية المستوى.
يسمح الصنف Numeric
بتمثيل (instantiation) الكائنات المحجوزة في الكومة (heap-allocated objects). تُنفَّذ الأصناف العددية الأساسية الأخرى، مثل Integer
، كأصناف آنيَّة، أي أنّ كل عدد صحيح هو كائن غير قابل للتغيير (immutable)، والذي يُمرَّر دائمًا بقيمته. اطلع على المثال التالي:
a = 1
1.object_id == a.object_id #=> true
لا يمكن أن يكون هناك إلا نسخة (instance) واحدة فقط من العدد الصحيح 1
. تضمن روبي بهذا منع إنشاء نسخ جديدة ومنع التكرار.
Integer.new(1) #=> NoMethodError: undefined method `new' for Integer:Class
1.dup #=> TypeError: can't dup Integer
لهذا السبب، يجب استخدام الصنف Numeric
عند تعريف أصناف عددية أخرى.
يجب أن تنفِّذ الأصناف التي ترث من الصنف Numeric
التابع coerce
، والذي يعيد مصفوفة بعنصرين تحتوي على كائن مُحوّل (coerced) إلى نسخة من الصنف الجديد والكائن self
(انظر توثيق التابع coerce
).
يجب أيضا على الأصناف الوراثة أن تنفِّذ معاملات العمليات الحسابية (+
، -
، *
و /
) والمعامل <=>
(انظر الصنف Comparable
). قد تعتمد هذه التوابع على التابع coerce
لضمان إمكانية التداخل (interoperability) مع نسخ الأصناف العددية الأخرى.
class Tally < Numeric
def initialize(string)
@string = string
end
def to_s
@string
end
def to_i
@string.size
end
def coerce(other)
[self.class.new('|' * other.to_i), self]
end
def <=>(other)
to_i <=> other.to_i
end
def +(other)
self.class.new('|' * (to_i + other.to_i))
end
def -(other)
self.class.new('|' * (to_i - other.to_i))
end
def *(other)
self.class.new('|' * (to_i * other.to_i))
end
def /(other)
self.class.new('|' * (to_i / other.to_i))
end
end
tally = Tally.new('||')
puts tally * 2 #=> "||||"
puts tally > 1 #=> true
توابع النسخ العامة (Public Instance Methods)
modulo
يعيد باقي قسم عدد على آخر.
+
يمثِّل المعامل +
الأحادي إشارة الزائد التي تسبق العدد لتشير إلى أنه عدد موجب.
-
يمثِّل المعامل -
الأحادي إشارة الناقص التي تسبق العدد لتشير إلى أنه عدد سالب.
<=>
يوازن المعامل <=>
بين عددين ثمَّ يعيد القيمة 0 إن كان هذان العددان متساويين، وإلا فسيُعيد القيمةnil
.
abs
يعيد القيمة المطلقة للعدد الذي استُدعي معه.
abs2
يعيد مربع العدد الذي استُدعي معه.
angle
يعيد القيمة 0
إن كان العدد الذي استُدعي معه موجبًا، أو القيمة pi
خلاف ذلك.
arg
يعيد القيمة 0
إن كان العدد الذي استُدعي معه موجبًا، أو القيمة pi
خلاف ذلك.
ceil
يعيد أصغر عدد من الأعداد الأكبر من أو تساوي العدد الذي استُدعي معه وبدقة محدَّدة.
clone
يعيد الكائن الذي استُدعي معه.
coerce
إن كان العدد المُمرَّر إلى التابع numeric
من نفس نوع العدد الذي استُدعي معه، فسيعيد مصفوفة تحوي هذين العددين. خلاف ذلك، سيحول هذين العددين إلى النوع Float
ويعيدهما في مصفوفة.
conj
يعيد الكائن الذي استُدعي معه (الكائن self
).
conjugate
يعيد الكائن الذي استُدعي معه (الكائن self
).
denominator
يعيد المقام (denominator) للعدد الكسري الذي استدعي معه، ويكون دائمًا موجبًا.
div
يستخدم المعامل /
لإجراء عملية القسمة على العددين المعطيين، ثم يحوّل النتيجة إلى عدد صحيح.
divmod
يعيد مصفوفة تحتوي على حاصل (quotient) وباقي قسمة العدد الذي استُدعي معه على العدد المُمرَّر إليه.
dup
يعيد الكائن الذي استُدعي معه.
eql?
يتحقق إن كان العدد الذي استُدعي معه والعدد المُمرَّر إليه من نفس النوع ومتساويين.
fdiv
يجري عملية القسمة بين العدد الذي استدعي معه والعدد الذي مُرِّر إليه ثم يعيد الناتج في عدد عشري.
?finite
يتحقق إن كان العدد الذي استُدعي معه عددًا منتهيًا (finite).
floor
يعيد أكبر عدد من الأعداد الأصغر من أو تساوي العدد الذي استُدعي معه وبدقة محدَّدة.
i
يعيد العدد التخيلي (imaginary number) المقابل للعدد الذي استدعي معه.
imag
يعيد الصفر.
imaginary
يعيد الصفر.
infinite?
يتحقق إذا ما إن كان العدد الذي استدعي معه منتهيًا (finite) أو غير منتهي من الطرف السالب (-Infinity
) أو غير منتهي من الطرف الموجب (+Infinity
).
integer?
يتحقق إن كان العدد الذي استُدعي معه من النوع Integer
.
magnitude
يعيد القيمة المطلقة للعدد الذي استُدعي معه.
modulo
يعيد باقي قسم عدد على آخر.
?negative
يتحقق إن كان العدد الذي استُدعي معه عددًا سالبًا.
?nonzero
يعيد العدد الذي استُدعي معه إن كان غير صفري، أو يعيد القيمة nil
خلاف ذلك.
numerator
يعيد البسط (numerator) للعدد الكسري الذي استدعي معه.
phase
يعيد القيمة 0
إن كان العدد الذي استُدعي معه موجبًا، أو يعيد القيمة pi
خلاف ذلك.
polar
يعيد المصفوفة [num.abs، num.arg]
، إذ num
هو العدد الذي استدعي معه.
?positive
يتحقق إن كان العدد الذي استُدعي معه عددًا موجبًا.
quo
يعيد ناتج القسمة الأكثر دقة (قيمة جذرية للأعداد الصحيحة، وقيمة عشرية للأعداد العشرية).
real
يعيد العدد الذي استدعي معه (الكائن self
).
real?
يتحقق إن كان العدد الذي استُدعي معه عددًا حقيقيًّا (أي ليس من النوع Complex
).
rect
يعيد المصفوفة [num, 0]
إذ num
يمثل العدد الذي استُدعي معه.
rectangular
يعيد المصفوفة [num, 0]
إذ num
يمثل العدد الذي استُدعي معه.
remainder
يعيد باقي قسم عدد على آخر. أي عندما يُستدعَى التابع بالشكل x.remainder(y)
، فإنه يماثل الاستدعاء x-y*(x/y).truncate
.
round
يقرِّب العدد الذي استُدعي معه إلى أقرب قيمة بدقة محدَّدة.
step
يستدعي الكتلة المعطاة مع تمرير سلسلة من الأعداد إليها بدءًا من العدد الذي استُدعي معه وحتى قيمة محدَّدة مع الزيادة أو الطرح بقدار خطوة ثابتة معطاة.
to_c
يحول العدد الذي استُدعي معه إلى عدد عقدي.
to_int
يستدعي التابع to_i
الخاص بالصنف الفرعي (child class) لتحويل العدد الذي استُدعي معه إلى عدد صحيح.
truncate
يعيد التابع truncate
العدد الذي استُدعي معه بعد اقتطاع المنازل العشرية منه بمقدار محدَّد.
zero?
يتحقق إن كانت قيمة العدد الذي استُدعي معه تساوي الصفر.
ملاحظات إضافية
الصنف Numeric
هو صنفٌ أساسيٌ لأنواع الكائنات الأخرى العددية. اطلع مثلًا على الشيفرة التالية:
puts 100.class # Fixnum
puts (100.2).class # Float
puts (100**100).class # Bignum
في بعض الحالات، تستبدل هذه الأصناف التوابع المعرَّفة في هذا الصنف.
لفهم سلوك أنواع محدَّدة من الأعداد، انتقل إلى التوثيق المخصص بهم واطَّلع عليه.