موضوع مقاله: ترکیب تابع (علوم کامپیوتر) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # ترکیب تابع (علوم کامپیوتر) | مقدمه: در علوم کامپیوتر ، ترکیب تابع یک عمل یا مکانیزم برای ترکیب توابع ساده برای ساخت توابع پیچیده تر است. | ## بخش 1: ترکیب تابع (علوم کامپیوتر) | مانند ترکیب معمول توابع در ریاضیات ، نتیجه هر تابع به عنوان آرگومان تابع بعدی و حاصل آخرین تابع نتیجه کل است. برنامه نویسان اغلب توابعی را برای نتایج سایر توابع اعمال می کنند و تقریباً همه زبان های برنامه نویسی این امکان را دارند. در برخی موارد، ترکیب توابع به عنوان یک تابع در نوع خود جالب است که بعدا مورد استفاده قرار می گیرد. چنین تابعی همیشه قابل تعریف است، اما زبان هایی با توابع درجه یک آن را آسان تر می کنند. توانایی نوشتن آسان توابع، توابع فاکتورگیری (تجزیه) را برای نگهداری و استفاده مجدد از کد تشویق می کند. به بیان محدود، ترکیب تابع برای توابعی اعمال می شود که بر روی مقدار محدودی از داده ها کار می کنند، هر مرحله قبل از تحویل به مرحله بعدی، آن را به صورت متوالی پردازش می کند. توابعی که بر روی داده‌های بالقوه بی‌نهایت کار می‌کنند (یک جریان یا دیگر داده‌های کد ) به عنوان فیلتر شناخته می‌شوند و در عوض در یک خط لوله متصل می‌شوند که مشابه ترکیب تابع است و می‌تواند همزمان اجرا شود. نوشتن آنها به این معنی است که ابتدا را محاسبه می کنیم, و سپس برای محاسبه استفاده می کنیم . این مثال در زبان C است:foo←f∘gاگر به نتیجه میانی نامی ندهیم، مراحل را می توان ترکیب کرد:z = f(g(x ;با وجود تفاوت در طول، این دو پیاده سازی نتیجه یکسانی را محاسبه می کنند. اجرای دوم تنها به یک خط کد نیاز دارد و به صورت محاوره ای به عنوان فرم "خیلی ترکیب شده" نامیده می شود. | ## بخش 2: ترکیب تابع (علوم کامپیوتر) | خوانایی و در نتیجه قابلیت نگهداری یکی از مزیت‌های فرم‌های بسیار ترکیبی است، زیرا به خطوط کد کمتری نیاز دارند و «مساحت سطح» برنامه را به حداقل می‌رسانند. از سوی دیگر، ممکن است استفاده بیش از حد از فرم های با ترکیب بالا امکان پذیر باشد. تودرتویی از توابع بیش از حد ممکن است اثر معکوس داشته باشد و کد را کمتر قابل نگهداری کند. در یک زبان مبتنی بر پشته ، ترکیب عملکردی حتی طبیعی تر است: این ترکیب توسط الحاق انجام می شود و معمولاً روش اصلی طراحی برنامه است. مثال بالا در Forth : g f که هر آنچه قبلاً روی پشته بود را می گیرد، g و سپس f را اعمال کرده و نتیجه را روی پشته بگذارید. نامگذاری ترکیب توابع حال فرض کنید ترکیب فراخوانی f بر روی نتیجه g اغلب مفید است و می‌خواهیم آن را foo نامگذاری کنیم تا به تنهایی به عنوان یک تابع استفاده شود. در اکثر زبان ها، ما می توانیم یک تابع جدید را تعریف کنیم که توسط ترکیب پیاده سازی شده است. در سایر زبان های برنامه نویسی می توانید مکانیسم های خود را برای انجام ترکیب تابع بنویسید. g با استفاده از عملگر ترکیب داخلی (.) که می تواند به صورت f بعد از g یا g تشکیل شده با f خوانده شود. g = \x -> f (g x)خط اول نوع (.) را توصیف می کند - یک جفت تابع را می گیرد و یک تابع را برمی گرداند (عبارت لامبدا در خط دوم). | ## بخش 3: ترکیب تابع (علوم کامپیوتر) | Nim Nim از نحو فراخوانی تابع یکنواخت پشتیبانی می کند که امکان ترکیب تابع دلخواه را از طریق نحو متد فراهم می کند . استیل (1994) به طور مستقیم ترکیب عملکرد را به جمع آوری بلوک های ساختمانی که به عنوان "موناد" در زبان برنامه نویسی هاسکل شناخته می شوند اعمال می کند. ابادی و لامپورت (1993) به طور رسمی یک قانون اثبات برای ترکیب عملکردی را تعریف کردند که ایمنی و زندگی یک برنامه را تضمین می کند. کراخت (2001) یک شکل تقویت شده از ترکیب پذیری را با قرار دادن آن در یک سیستم سیمویتیک و اعمال آن به مشکل عدم وضوح ساختاری که اغلب در زبان شناسی محاسباتی رخ می دهد، شناسایی کرد. ترکیب در مقیاس بزرگ کل برنامه‌ها یا سیستم‌ها را می‌توان به‌عنوان توابعی در نظر گرفت که در صورتی که ورودی‌ها و خروجی‌های آن‌ها به خوبی تعریف شده باشند، می‌توانند به راحتی ترکیب شوند. خطوط لوله ای که امکان ترکیب آسان فیلترها را فراهم می کردند، چنان موفق بودند که به الگوی طراحی سیستم عامل تبدیل شدند. رویه‌های ضروری با عوارض جانبی شفافیت ارجاعی را نقض می‌کنند و بنابراین کاملاً قابل ترکیب نیستند. با این حال، اگر "وضعیت جهان" قبل و بعد از اجرای کد را به عنوان ورودی و خروجی آن در نظر بگیریم، یک تابع تمیز دریافت می‌کنیم. | ## جمع‌بندی | فرمالیسم موناد از این ایده برای ترکیب عوارض جانبی و ورودی/خروجی (I/O) در زبان های کاربردی استفاده می کند.