ال

النطاقات في Julia

1 تمرين

نبذة عن النطاقات

لنفترض أنك تريد كل الأعداد الصحيحة غير السالبة حتى 1000. سيكون من السخف أن تضطر إلى كتابتها كلها داخل مصفوفة.

لهذا لدينا النوع range:

julia> 0:1000
0:1000

julia> typeof(0:1000)
UnitRange{Int64}

المدى شائع جدًا: لا لتوفير الكتابة عليك فحسب، بل أيضًا كأنواع إرجاع من الدوال.

لاحظ أن المدى ليس مصفوفة.

تُعرَّف المصفوفات عند البداية (تقييم «جشع»)، وتحتاج إلى مساحة تخزين تتناسب مع طول المصفوفة.

في المقابل، المدى ليس سوى مجموعة من التعليمات لتوليد تتابع (تقييم «كسول»، أو «مُكرِّر»).

إذا احتجت إلى المدى على هيئة مصفوفة، فاستخدم الدالة collect() للتحويل:

julia> collect(0:5)
6-element Vector{Int64}:
 0
 1
 2
 3
 4
 5

ويمكنك، إن أردت، استخدام collect(type, range) لتحديد نوع المصفوفة الناتجة.

يمكن تحديد حجم الخطوة، وهو في هذه الحالة 0.3:

julia>  collect(1.0:0.3:2.0)
4-element Vector{Float64}:
 1.0
 1.3
 1.6
 1.9

إذن فالصيغة هي start:stepsize:stop. كلا طرفَي المدى شاملان، كما رأيت في مثال الأعداد الصحيحة. وإذا لم يكن حجم الخطوة قاسمًا دقيقًا للفرق stop - start، فإن العنصر الأخير لن يتجاوز stop.

ولتحكم أدق، استخدم الدالة Base.range()، التي توفّر خيارات إضافية عدة.

مديات الحروف

يمكن استخدام متتاليات غير عددية في المدى أيضًا. أبسط مثال على ذلك هو حروف ASCII:

julia> 'a':'d'
'a':1:'d'

julia> typeof('a':'d')
StepRange{Char, Int64}

julia> collect('a':'d')
4-element Vector{Char}:
 'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)
 'b': ASCII/Unicode U+0062 (category Ll: Letter, lowercase)
 'c': ASCII/Unicode U+0063 (category Ll: Letter, lowercase)
 'd': ASCII/Unicode U+0064 (category Ll: Letter, lowercase)

سنغطي النوع Char بمزيد من التفصيل في مفهوم آخر. في الوقت الحالي، تعامل معها ببساطة كأحرف مفردة بين علامتي اقتباس مفردتين.

دوال وعوامل المدى

تحقّق من طرفَي المدى باستخدام first() وlast().

غالبًا ما يكون من المفيد معرفة ما إذا كانت قيمة معيّنة جزءًا من المدى. الدالة الأساسية لهذا هي in()، لكن الأكثر شيوعًا استخدام العامل الوسيط in أو مرادفه الرياضي ∈. في محرّر مناسب، اختصار كتابة ∈ هو \in ثم المفتاح tab.

 r = 1:10  # => 1:10
 first(r)  # => 1
 last(r)   # => 10
 7 in r    # => true
 11 ∈ r    # => false

يُستخدم العامل in أو ∈ هنا مع المدى، لكن يمكن استخدامه أيضًا مع عدة أنواع أخرى من المجموعات، مثل المتجهات والمجموعات والقواميس.

المزيد عن فهرسة المصفوفات

يمكن استخدام مديات الأعداد الصحيحة والمصفوفات في فهرسة المصفوفات:

nums = collect(10.0:50.0)
nums[3:2:7]  # gives [12.0, 14.0, 16.0]
nums[ [3, 5, 7] ] # also gives [12.0, 14.0, 16.0]

كما يعمل استخدامها مع end، لكن أسبقية العوامل قد تجعل الأقواس الهلالية ضرورية:

 nums[(end - 3):end]
4-element Vector{Float64}:
 47.0
 48.0
 49.0
 50.0

وبالطبع، يمكن أن يكون أي عنصر من عناصر الفهرس متغيرًا صحيحًا موجودًا من قبل.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم النطاقات