تحتاج أحيانًا إلى النظر إلى تسلسل باعتباره تتابعًا من القطع بدلًا من التعامل معه عنصرًا عنصرًا. تمنحك مفردات grouping وsplitting وsplitting.monotonic أربع طرق لفعل ذلك.
group: كتل منفصلة بحجم n
group ( seq n -- groups )
USING: grouping ;
{ 1 2 3 4 5 6 7 } 3 group .
! => { { 1 2 3 } { 4 5 6 } { 7 } }
إذا لم يكن طول التسلسل من مضاعفات n، تكون الكتلة الأخيرة أقصر من n.
clump: نافذة منزلقة متداخلة بحجم n
clump ( seq n -- clumps )
USING: grouping ;
{ 1 2 3 4 5 } 2 clump .
! => { { 1 2 } { 2 3 } { 3 4 } { 4 5 } }
إذا كان التسلسل أقصر من n، تكون النتيجة فارغة.
split-when: التقسيم حيثما يتحقق اختبار شرطيsplit-when ( seq quot: ( elt -- ? ) -- pieces )
USING: splitting ;
{ 1 2 0 3 4 0 5 } [ zero? ] split-when .
! => { { 1 2 } { 3 4 } { 5 } }
يحصل كل عنصر على استدعاء الاختبار الشرطي الخاص به؛ العناصر التي يُرجع عنها قيمة صحيحة هي نقاط القطع ولا تُحتفظ بها في النتيجة.
monotonic-split: تقسيم المقاطع المتتالية عندما يفشل فحص الزوج المتجاورmonotonic-split ( seq quot: ( a b -- ? ) -- pieces )
USING: splitting.monotonic ;
{ 1 1 2 2 2 3 } [ = ] monotonic-split .
! => { { 1 1 } { 2 2 2 } { 3 } }
يعمل الاختبار الشرطي على الأزواج المتجاورة. ما دام يُرجع قيمة صحيحة، يستمر المقطع؛ وعندما يُرجع f، يبدأ مقطع جديد. مع [ = ] تحصل على مقاطع من عناصر متساوية؛ ومع [ <= ] تحصل على مقاطع غير متناقصة؛ وهكذا.
group/clump: تعرف الحجم الذي تريده.split-when: تعرف كيف يبدو عنصر القطع.monotonic-split: تعرف ما الذي يجعل عنصرين متجاورين ينتميان معًا.ليلة مزدحمة أخرى في ساحة الفرز في أنتويرب. أنت موجّه الحركة المناوب: يجب إعادة تجميع عربات الشحن القادمة في قطارات صادرة، وفحص الوصلات، وتقسيم المسارات عند المفاصل، ودمج الحمولات المتطابقة لأغراض الفوترة.
كل عربة هي سلسلة نصية تسمّي ما تحمله: "coal"، "timber"، "crates"، إلخ.
عرّف couple لتأخذ مصفوفة من العربات وطولًا n، وتُرجع قطارات غير متداخلة من n عربة لكل قطار. قد يكون القطار الأخير أقصر إذا لم يقبل العدد القسمة بالتساوي.
{ "coal" "coal" "coke" "ore" "ore" "timber" "timber" } 3 couple .
! => { { "coal" "coal" "coke" } { "ore" "ore" "timber" } { "timber" } }
عرّف peek-couplings لتأخذ مصفوفة من العربات وتُرجع كل زوج متجاور، حتى يتمكن المفتش من فحص كل وصلة.
{ "coal" "ore" "timber" "crates" } peek-couplings .
! => { { "coal" "ore" } { "ore" "timber" } { "timber" "crates" } }
عرّف split-at-junctions لتأخذ مصفوفة من العربات ومصفوفة junctions (عربات تحدّد نقطة قطع)، وتُرجع المقاطع الواقعة بين عربات المفاصل. لا تُحتفظ بعربات المفاصل نفسها.
{ "coal" "coal" "switch" "ore" "switch" "timber" }
{ "switch" } split-at-junctions .
! => { { "coal" "coal" } { "ore" } { "timber" } }
عرّف coalesce-cargo لتأخذ مصفوفة من العربات وتجمع العربات المتتالية الحاملة للحمولة نفسها في متتاليات.
{ "coal" "coal" "ore" "ore" "ore" "timber" "coal" } coalesce-cargo .
! => { { "coal" "coal" } { "ore" "ore" "ore" } { "timber" } { "coal" } }
سجّل في Exercism لتتعلّم وتتقن Factor عبر 47 مفهومًا163 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.