مسیرها
/
Unison
Unison
/
تمرین‌ها
/
عملیات Stream
عملیات Stream

عملیات Stream

متوسط

دستورالعمل‌ها

عملیات‌های پایه‌ی توانایی 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) روی همه‌ی عناصر را برگردانید)

درباره‌ی ability Stream

Stream یک ability در Unison است که برای انتشار مقادیر به کار می‌رود.

اگر تابعی دارید که باید هنگام فراخوانی، مقادیر را به‌عنوان یک اثر جانبی تولید کند، ممکن است از ability 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]

می‌توانیم با یک ability handler، Stream را به‌صورت یک List و همراه با مقدار بازگشتی تابعی که آن را تولید می‌کند، درآوریم:

> Stream.toListWithResult! emitRunningTotal
  ⧩
  ([1, 3, 5, 7, 9], 5)
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Unison Exercism

آماده‌اید عملیات Stream را شروع کنید؟

در Exercism ثبت‌نام کنید تا Unison را همراه با 53 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.