المسارات
/
Unison
Unison
/
التمارين
/
عمليات التدفق
عمليات التدفق

عمليات التدفق

متوسط

التعليمات

نفّذ عمليات القدرة Stream الأساسية.

في اللغات الدالية، تُعد دوال مثل filter وmap وreduce شائعة جدًا. نفّذ مجموعة من المُركّبات الدالية الأساسية لقدرة تدفق دون استخدام الدوال الموجودة. ستحتاج إلى كتابة معالجات القدرة بنفسك.

💡 سنسمي هذه القدرة MyStream لتجنّب التعارض مع القدرة Stream الموجودة في المكتبة القياسية.

العمليات التي ستحتاج إلى تنفيذها هي:

  • MyStream.fromList (إذا أُعطيت مصفوفة من العناصر، فأنشئ تدفقًا من العناصر )
  • MyStream.toList (إذا أُعطيت تدفقًا من العناصر، فحوّله إلى مصفوفة)
  • MyStream.toListWithResult (إذا أُعطيت تدفقًا من العناصر، فحوّله إلى مصفوفة مع نتيجة دالة التدفق)
  • MyStream.ignore (إذا أُعطيت تدفقًا من العناصر، فتجاهل القيم الصادرة، وأرجع نتائج دالة التدفق)
  • MyStream.filter (إذا أُعطيت دالة شرطية وMyStream، فأرجع MyStream المكوّن من كل العناصر التي تكون عندها قيمة predicate(item) صحيحة)؛
  • MyStream.map (إذا أُعطيت دالة وMyStream، فأرجع MyStream المكوّن من نتائج تطبيق function(item) على كل العناصر)؛
  • MyStream.flatMap (إذا أُعطيت دالة تُنتج MyStream وMyStream، فأرجع MyStream المكوّن من نتائج تطبيق function(item) على كل العناصر)

عن قدرة Stream

Stream قدرة في Unison تُستخدم لإصدار القيم.

قد تحتاج إلى استخدام قدرة Stream إذا كانت لديك دالة يُفترض أن تنتج قيمًا كأثر جانبي أثناء استدعائها. على سبيل المثال، تُرجع هذه الدالة القيمة الأخيرة في المصفوفة، لكنها تُصدر مجموعًا تراكميًا مع كل عنصر يمرّ:

emitRunningTotal : '{Stream Nat} Nat
emitRunningTotal = 'let
  use Nat +
  List.foldLeft (
    acc a -> let
      runningTotal = acc + a
      Stream.emit runningTotal
      a
    ) 0 [1,2,3,4,5]

يمكننا تجسيد Stream على هيئة مصفوفة إلى جانب القيمة المُرجَعة من الدالة التي تنتجه، باستخدام معالج قدرة:

> Stream.toListWithResult! emitRunningTotal
  ⧩
  ([1, 3, 5, 7, 9], 5)
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Unison Exercism

مستعد لبدء عمليات التدفق؟

سجّل في Exercism لتتعلّم وتتقن Unison عبر 53 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.