عملیات پایهای لیست را پیادهسازی کنید.
در زبانهای تابعی، عملیات لیست مانند length، map و reduce بسیار رایجاند. مجموعهای از عملیات پایهای لیست را بدون استفاده از توابع موجود پیادهسازی کنید.
تعداد و نام دقیق عملیاتی که باید پیادهسازی شوند بسته به track است تا با نامهای موجود تداخل نکنند، اما عملیات کلی که پیادهسازی میکنید عبارتاند از:
append (با گرفتن دو لیست، همهی عناصر لیست دوم را به انتهای لیست اول اضافه میکند)؛concatenate (با گرفتن چندین لیست، همهی عناصر همهی لیستها را در یک لیست مسطح ترکیب میکند)؛filter (با گرفتن یک «محمول» و یک لیست، لیست همهی عناصری را برمیگرداند که predicate(item) برایشان «درست» است)؛length (با گرفتن یک لیست، تعداد کل عناصر آن را برمیگرداند)؛map (با گرفتن یک تابع و یک لیست، لیست نتایج اعمال function(item) روی همهی عناصر را برمیگرداند)؛foldl (با گرفتن یک تابع، یک لیست و «انباشتگر» اولیه، هر عنصر را از سمت چپ در انباشتگر تا میکند (کاهش میدهد))؛foldr (با گرفتن یک تابع، یک لیست و «انباشتگر» اولیه، هر عنصر را از سمت راست در انباشتگر تا میکند (کاهش میدهد))؛reverse (با گرفتن یک لیست، لیستی برمیگرداند که همهی عناصر اصلی را دارد، اما با ترتیب معکوس).توجه کنید که ترتیبی که آرگومانها به توابع تا (foldl، foldr) داده میشوند اهمیت دارد.
استفاده از قابلیتهای اصلی زبان برای ساختن و از هم باز کردن آرایهها از طریق destructuring، و همچنین استفاده از لیترال آرایهی [] مجاز است، اما نباید از هیچیک از توابع Array.prototype استفاده کنید.
برای اینکه بتوانید راهحل خود را تست کنید، مطمئن شوید که forEach پیادهسازی شده است.
const list = List.create(1, 2)
list.forEach((item) => console.log(item))
// =>
// 1
// 2
در Exercism ثبتنام کنید تا TypeScript را همراه با 108 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.
از مقدمهای عملی بر بازگشت لذت ببرید، جایگزینهای دستوری و تابعی «عملیات لیست» را بررسی کنید و به بازگشت دنبالهای و توابع انباره عمیق شوید.