دوره های آموزشی آکادمی پی وی لرن (پروژه محور و ویژه بازار کار)



  • ۲۶
  • اردیبهشت

جلسه ۱۵-۰۱ : Lists در #F

  • دسته‌بندی‌ها :
جلسه ۱۵-۰۱ : Lists در #F
    • جزئیات
    • نوع محتواآموزشی

      مقدمه

      سلام درود خدمت همراهان همیشگی سایت پی وی لرن . با آموزش زبان برنامه نویسی #F همراهتون هستیم. برای تعریف لیست در #F فقط کافیست از [] و برای جداسازی آیتم‌های موجود در لیست از عملگر :: (بخوانید cons) استفاده کنید. در این بخش ایجاد و آماده سازی Lists در #F رو در سه جلسه خواهیم داشت. در ادامه انواع لیست ها و خصوصیات آن ها از جمله خصوصیات List Data Type در #F رو بررسی می نماییم.

      Lists در #F

      Lists در #F یک سری از عناصر مرتب شده و غیر قابل تغییر از همان نوع است. این تا حدودی معادل ساختار linked list data است.
      ماژول F #، Microsoft.FSharp.Collections.List، عملیات مشترک در Lists ها دارد. با این حال #F این ماژول را به صورت خودکار وارد می کند و باعث می شود که هر برنامه #F قابل دسترسی باشد.

      ایجاد و آماده سازی Lists در #F

      در زیر راه های مختلف ایجاد لیست آمده است.

      • استفاده از list literals
      • استفاده از عملگر (::) cons
      • با استفاده از روش list.init از List module.
      • با استفاده از ساختارهای syntactic به نام List Comprehensions.

      استفاده از list literals

      در این روش، شما فقط توالی مقادیر محدوده ی سیمیکالن را در محیط براکت مشخص می کنید .

      به عنوان مثال

      مثال : 

      استفاده از عملگر (::) cons

      با استفاده از این روش، می توانید برخی از مقادیر را به صورت پیش فرض یا با منصوب کردن آن به لیست موجود با استفاده از عملگر (::) cons اضافه کنید.

      به عنوان مثال

      مثال : 

      [] یک لیست خالی را نشان می دهد.

      متد List init

      روش list.init از ماژول List اغلب برای ایجاد List استفاده می شود.

      مثال : 

      اولین آرگومان طول مورد نظر در لیست جدید است و دومین آرگومان یک تابع initializer است که عناصر را در لیست تولید می کند.

      مثال

      مثال : 

      در این جا، تابع index لیست را تولید می کند.

      List Comprehensions

      List Comprehensions ساختار سینتکس های خاص generating lists هستند.
      سینتکس list comprehension در #F به دو فرم است. ranges و generators.

      ranges ساختار  [start .. end] و [start .. step .. end] را دارد.
      مثلا،

      مثال : 

      generators دارای ساختار [for x in collection do … yield expr] هستند.

      برای مثال

      مثال : 

      همانطور که کلمات کلیدی yield یک مقدار واحد را به یک لیست می برد، کلمه کلیدی، !yield یک مجموعه ای از مقادیر را به لیست فشار می دهد.
      تابع زیر روش های فوق را نشان می دهد .

      مثال

      مثال : 

      هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.

      مثال : 

      خصوصیات List Data Type در #F

      ویژگینوعتوضیحات
      HeadT’اولین عنصر است.
      EmptyT list’یک ویژگی استاتیک که یک لیست خالی از نوع مناسب را نشان می دهد.
      IsEmptybooltrue است اگر لیست هیچ عنصر نداشته باشد.
      ItemT’عنصر در index مشخص شده (zero-based).
      Lengthintتعداد عناصر
      TailT list’لیست بدون عنصر اول

      مثال زیر استفاده از این خواص را نشان می دهد .(خصوصیات List Data Type در #F)

      مثال : 

      هنگامی که شما برنامه را کامپایل و اجرا می کنید، خروجی زیر را تولید می کند.(خصوصیات List Data Type در #F)

      مثال : 

      پس از خصوصیات List Data Type در #F به عملگرهای پایه در List می پردازیم.

      عملگرهای پایه در List

      جدول زیر اعمال اساسی را در list data type نشان می دهد.

      مقدارتوضیحات
      append : ‘T list → ‘T list → ‘T listیک لیست جدید را که حاوی عناصر اول فهرست همراه عناصر دوم است، بازمی گرداند.
      average : ‘T list → ^Tمیانگین عناصر موجود در لیست را بازمیگرداند.
      averageBy : (‘T → ^U) → ‘T list → ^Uمیانگین عناصر ایجاد شده توسط اعمال تابع به هر عنصر لیست را بازمی گرداند.
      choose : (‘T → ‘U option) → ‘T list → ‘U listتابع داده شده را به هر عنصر لیست اعمال می کند. لیستی شامل نتایج هر عنصر که تابع برخی از آن ها را باز می گرداند، برمی گرداند.
      collect : (‘T → ‘U list) → ‘T list → ‘U listبرای هر عنصر از لیست، تابع داده شده اعمال می شود. همه نتایج را به هم پیوند می دهد و لیست ترکیبی را باز می گرداند.
      concat : seq<‘T list> → ‘T listلیست جدیدی را که حاوی عناصر هر لیست به ترتیب است، بازگرداند.
      empty : ‘T listیک لیست خالی از نوع داده را نشان می دهد.
      exists : (‘T → bool) → ‘T list → boolتست می کند، اگر هر عنصر از لیست منطبق با مفروض داده شده است.
      exists2 : (‘T1 → ‘T2 → bool) → ‘T1 list → ‘T2 list → boolتست می کند ،اگر هر جفت عناصر متناظر از لیست ها منطبق با پیش فرض داده شده باشد.
      filter : (‘T → bool) → ‘T list → ‘T listیک مجموعه جدید که شامل فقط عناصر مجموعه است را بازمی گرداند که پیش فرض قرار داده شده true را باز گرداند.
      find : (‘T → bool) → ‘T list → ‘Tاولین عنصر را بازمی گرداند که تابع داده شده true باشد.
      findIndex : (‘T → bool) → ‘T list → intindex اولین عنصر در لیست را برمی گرداند که منطق داده شده را ارضا می کند.
      fold : (‘State → ‘T → ‘State) → ‘State → ‘T list → ‘Stateیک تابع را برای هر عنصر مجموعه اعمال می کند،آرگومان accumulator را از طریق محاسبات تریدینگ می کند. این تابع آرگومان دوم را می گیرد و تابع را به آن اعمال می کند و اولین عنصر از لیست است.سپس، این نتیجه را به تابع همراه با عنصر دوم منتقل می کند و غیره. در نهایت، نتیجه نهایی را برمی گرداند. اگر تابع ورودی f باشد و عناصر i0 … iN باشد، این تابع f (… f s i0) i1 …) iN را محاسبه می کند.
      fold2 : (‘State → ‘T1 → ‘T2 → ‘State) → ‘State → ‘T1 list → ‘T2 list → ‘Stateیک تابع به عناصر مربوطه از دو مجموعه اعمال می شود، یک آرگومان accumulator را از طریق محاسبات تریدینگ می کند. مجموعه ها باید اندازه های یکسان داشته باشند. اگر تابع ورودی f است و عناصر i0 … iN و j0 … jN، سپس این تابع f (… (f s i0 j0) …) iN jN را محاسبه می کند.
      foldBack : (‘T → ‘State → ‘State) → ‘T list → ‘State → ‘Stateیک تابع را برای هر عنصر مجموعه اعمال می کند، آرگومان accumulator را از طریق محاسبات تریدینگ می کند. اگر تابع ورودی isf و عناصر i0 … iN باشد، سپس f i0 (…(f iN s)) محاسبه می شود.
      foldBack2 : (‘T1 → ‘T2 → ‘State → ‘State) → ‘T1 list → ‘T2 list → ‘State → ‘Stateیک تابع به عناصر مربوطه از دو مجموعه اعمال می شود، یک آرگومان accumulator را از طریق محاسبات تریدینگ می کند. مجموعه ها باید اندازه های یکسان داشته باشند. اگر تابع ورودی f باشد و عناصر i0 … iN و j0 … jN باشد، این تابع f i0 j0 (… (f iN jN s) را محاسبه می کند).

      ادامه مبحث Lists در #F رو در جلسه بعد خواهیم داشت.

      کلام پایانی

      در بخش اول ایجاد و آماده سازی Lists در #F به بیان انواع لیست ها، خصوصیات List Data Type در #F ، عملگرهای پایه در List، استفاده از عملگر (::) cons و…پرداختیم. در جلسه بعد این مبحث رو ادامه خواهیم داد.

      QR:  جلسه ۱۵-۰۱ : Lists در #F
      به اشتراک بگذارید