مسیرها
/
Common Lisp
Common Lisp
/
تمرین‌ها
/
بخش‌بندی عددی لوگان
بخش‌بندی عددی لوگان

بخش‌بندی عددی لوگان

تمرین یادگیری

مقدمه

کاهش

کاهش یعنی اعمال مکرر یک تابع روی هر عنصر از یک دنباله و انباشتن نتایج، به شکلی خاص. تابعی که اعمال می‌شود دو پارامتر می‌گیرد: مقدار انباشته‌ی کنونی و عنصری که باید پردازش شود. نتیجه‌ی آن باید مقدار انباشته‌ی جدید باشد.

در Common Lisp این کار با تابع reduce انجام می‌شود. در ساده‌ترین شکلش چنین است:

(reduce #'function-to-apply sequence :initial-value value)

توجه کنید که یک مقدار اولیه داده می‌شود؛ این همان «مقدار انباشته‌ی کنونی» است که هنگام پردازش اولین عنصر به تابع داده می‌شود.

این مثالی است که اعداد فهرست را با شروع از مقدار اولیه‌ی ۱۰ با هم جمع می‌کند:

(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20

در نظر داشته باشید که اگر دنباله خالی باشد، تابع هرگز فراخوانی نمی‌شود و این فرم به مقدار اولیه ارزیابی می‌شود.

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

لوگان، فضاییِ Lisp، عددها را دوست دارد و از مرتب کردن هم خوشش می‌آید.

او از شما می‌خواهد به او کمک کنید تابعی بنویسد که فهرستی از عددها را بگیرد و جفتی از دو فهرست تولید کند: فهرست اول همه‌ی عددهای فرد است و فهرست دوم همه‌ی عددهای زوج.

1. دسته‌بندی یک عدد

اول باید تابعی بسازید که یک جفت از دو فهرست و یک عدد را بگیرد و آن عدد را بسته به اینکه فرد است یا زوج، در زیرفهرست درست قرار دهد:

(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))

2. دسته‌بندی تعداد زیادی عدد

حالا با استفاده از تابعی که همین الان ساختید، می‌توانید تابع دیگری بنویسید که فهرستی از عددها را بگیرد و آن‌ها را مانند بالا دسته‌بندی کند:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Common Lisp Exercism

آماده‌اید بخش‌بندی عددی لوگان را شروع کنید؟

در Exercism ثبت‌نام کنید تا Common Lisp را همراه با 27 مفهوم92 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.