Joy (زبان برنامه نویسی)
برخی از ویرایشها در این مقاله در چارچوب یک تکلیف دانشگاهی انجام شدهاند. این تکالیف توسط ؟ برای دانشجویان ؟ تعیین شدهاند. |
این مقاله، Joy (زبان برنامه نویسی)، اخیراً بهواسطهٔ فرایند ایجاد مقاله ایجاد شدهاست. بازبینیکننده در حال بستن درخواست است و این برچسب احتمالاً بهزودی برداشته میشود.
ابزارهای بازبینی: پیشبارگیری بحث اعلان به نگارنده |
خطای اسکریپتی: پودمان «AfC submission catcheck» وجود ندارد. زبان برنامه نویسی Joy در علوم کامپیوتر یک زبان برنامه نویسی کاملا تابعی است که توسط Manfred von Thun از دانشگاه La Trobe در ملبورن استرالیا تولید شده است. Joy به جای حساب لامبدا، بر مبنای ترکیب توابع است. مشخص شده است که این زبان، نه به دلیل طراحی بلکه به دلیل نوعی تکامل موازی و همگرایی، شباهتهای زیادی به فورث دارد. همچنین از سبک برنامه نویسی در سطح تابع زبان برنامه نویسی FP، ساختهی جان باکوس، الهام گرفته است. [۱]
نحوهٔ کار[ویرایش]
Joy در میان زبانهای برنامهنویسی تابعی (به جز زبانهای برنامهنویسی در سطح تابع و برخی زبانهای برنامهنویسی محرمانه، مانند Unlambda) در فقدان عملگر لامبدا و در نتیجه عدم وجود پارامترهای رسمی، غیرعادی است. برای توضیح این موضوع با یک مثال متداول، در اینجا نحوهٔ تعریف تابع توان دو (مربع) در یک زبان برنامه نویسی دستوری (C) آمده است:
int square(int x)
{
return x * x;
}
متغیر x پارامتری است که هنگام فراخوانی تابع، با آرگومان ورودی آن جایگزین میشود تا به توان دو برسد. در یک زبان تابعی (اسکیم)، همان تابع را به روش زیر میتوان تعریف کرد:
(define square
(lambda (x)
(* x x)))
این روش از بسیاری جهات متفاوت است، ولی همچنان از پارامتر x به طور مشابه استفاده می کند. در Joy، تابع مربع به این صورت تعریف میشود:
DEFINE square == dup * .
در Joy، هرچیزی یک تابع است که پشتهای را به عنوان ورودی گرفته و یک پشته به عنوان نتیجه برمیگرداند. به عنوان مثال، عدد '5' یک عدد صحیح ثابت را نشان نمیدهد؛ بلکه یک برنامهٔ کوتاه است که عدد 5 را به پشته وارد میکند.
- عملگر dup بالاترین عنصر پشته را با وارد کردن یک کپی از آن کپی میکند.
- عملگر * دو عدد بالای پشته را خارج و حاصل ضرب آنها را وارد میکند.
بنابراین تابع توان دو یک کپی از بالاترین عنصر میسازد، سپس دو عنصر بالای پشته را ضرب میکند و در نتیجه مربع عنصری را که ابتدا بالاترین بوده، در بالای پشته باقی میگذارد، بدون آن که به پارامتری رسمی نیاز باشد. این امر Joy را به زبانی مختصر تبدیل می کند، همانطور که در این تعریف از مرتب سازی سریع نشان داده شده است:
DEFINE qsort ==
[small]
[]
[uncons [>] split]
[enconcat]
binrec.
«binrec» یکی از چندین ترکیبکنندهٔ بازگشتی Joy است که بازگشت دودویی را پیادهسازی میکند. به چهار برنامهی قرار داده شده در "" در بالای پشته نیاز دارد که نشان دهندهٔ:
- شرط خاتمه (اگر یک لیست «کوچک» باشد (۰ یا ۱ عنصری) قبلاً مرتب شده است)،
- اگر شرط خاتمه برقرار شد، چه باید کرد (در این مورد هیچ کار)،
- به طور پیشفرض چه باید کرد (با مقایسهٔ هر عنصر با محور، لیست را به دو نیمه تقسیم کند)، در نهایت
- در انتها چه باید کرد (محور را بین دو نیمهی مرتب شده اضافه کند).
خلوص ریاضی[ویرایش]
در Joy، تابع معنا یک همریختی از منوئید نحوی به منوئید معنایی است؛ یعنی رابطهٔ نحوی الحاق نمادها مستقیماً به رابطهٔ معنایی ترکیب توابع نگاشت میشود. این نگاشت یک همریختی است و نه یکریختی؛ چرا که پوشا است ولی یکبهیک نه. به این ترتیب، هیچ نمادی بیش از یک معنی ندارد ولی برخی دنبالههای نمادها، معنی یکسان دارند (مثلاً «+ dup» و «* 2»).
Joy یک زبان برنامهنویسی الحاقی است:«الحاق دو برنامه، به معنای ترکیب توابع مشخص شده توسط آن دو برنامه است». [۲]
روالهای کتابخانهای آن همانند ISO C است، اگرچه که پیادهسازی کنونی به راحتی با توابع نوشته شده در سی قابل توسعه نیست.
جستارهای وابسته[ویرایش]
- RPL
- زبان برنامهنویسی پیوسته
منابع[ویرایش]
- ↑ Manfred von Thun (December 12, 2003). "A Conversation with Manfred von Thun". Retrieved May 31, 2013.
In the early 1980s I came across the famous Backus paper "Can programming be liberated from the von Neumann style," and I was immediately intrigued by the higher level of programming in his FP.
صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد. - ↑ "Mathematical Foundations of Joy". Archived from the original on October 7, 2011.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
لینک های خارجی[ویرایش]
- وب سایت رسمی زبان برنامه نویسی Joy (دانشگاه La Trobe)
- آینه صفحه اصلی Joy
- مجموعه آموزنده در Joy گردآوری شده است
- Joy قابل اجرا فوری (GitHub-Archiv)
- Freneger, Paul (August 2003). "The JOY of forth". ACM SIGPLAN Notices. 38 (8).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- von Thun, Manfred; Thomas, Reuben (October 9, 2001). "Joy: Forth's Functional Cousin" (PDF). Proceedings of the 17th EuroForth Conference.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- Christopher Diggins (December 31, 2008). "What is a Concatenative Language". Dr. Dobbs.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- Apter, Stevan. "Functional Programming in Joy and K". Vector. Archived from the original on 2008-08-28. Retrieved 2011-02-28.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- mjoy، مترجم در دلفی برای طراحی ماشینی (زیر مجموعه شادی)
رده:زبانهای برنامهنویسی سطح بالا رده:زبانهای برنامهنویسی ماشینی پویا رده:زبانهای برنامهنویسی پویا رده:نرمافزارهای سال ۲۰۰۱ (میلادی) رده:زبانهای برنامهنویسی ساختهشده در ۲۰۰۱ (میلادی) رده:زبانهای برنامهنویسی آکادمیک رده:زبانهای تابعی رده:زبانهای برنامهنویسی
This article "Joy (زبان برنامه نویسی)" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Joy (زبان برنامه نویسی). Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.