آیکون (زبان برنامه‌نویسی) کیست؟ توضیح بده.
آیکون (Icon)، یک زبان برنامه نویسی بسیار سطح بالا است که برای آسان نمودن نوشتن برنامه‌هایی با هدف کار با رشته‌ها و ساختارها، طراحی شده‌است. این زبان هم مانند بسیاری از زبان‌ها از زبان دیگری مشتق شده‌است. زبان اصلی - که این زبان از روی آن طراحی شده‌است - SNOBOL است. SNOBOL در آزمایشگاه Bell Telephone در اوایل دهه 60 ساخته شد. بعد به زبان SNOBOL4 ارتقا یافت. که هم‌اکنون نیز از آن استفاده می‌شود. Icon در ظاهر ساختارش از SNOBOL4 تأثیر برداشته‌است.Icon یک زبان بسیار سطح بالا با ویژگی اجرای هدف گرا بوده و امکانات زیادی برای پردازش رشته‌ها و الگوهای متنی دارد. این زبان با SNOBOL که یک زبان پردازش رشته‌است مرتبط است. Icon شی گرا نیست، اما یک نمونه شی گرا که Idol نامیده می‌شد در سال 1996 گسترش یافت که سرانجام تبدیل به Unicon شد.درباره آیکون.طراحی و پیاده‌سازی این زبان در محیطی آکادمیک و نه اقتصادی انجام شده‌است. این زبان توسط هیئت علمی، کارمندان و دانشجویان دانشگاه آریزونا، با کمک‌های مالی داوطلبانه از سراسر دنیا پیاده‌سازی شد.Icon یک زبان برنامه‌نویسی همه منظوره، با قابلیت‌های گسترده برای پردازش رشته‌ها (متن) و ساختارهای داده‌است. این زبان در دسته بندی زبان‌ها جز دسته زبان‌های امری طبقه‌بندی می‌شود. یک زبان با گرامری شبیه C و پاسکال. ولی با معنایی در سطح خیلی بالاتر، که با آن می‌توان کارهای پیچیده‌ای انجام داد.Icon یک روش نو برای ارزیابی عبارات دارد سبب ارزیابی عبارت بر اساس هدف می‌شود. قابلیت چک کردن تطابق رشته‌ها را دارد که باعث دور شدن برنامه‌نویس از مشکلات ملال‌آور کار با رشته‌ها می‌شود. داده‌ساختارها درونی Icon شامل setها و جدول‌ها با قابلیت داشتن لیست‌هایی است که بتوان از آن به عنوان vector استفاده کرد.سیستم type این زبان قوی است. تبدیل تایپ در این زبان به صورت خودکار انجام می‌شود. و اگر یک عددی، در جایی که باید رشته به کار رود استفاده شود، به صورت خودکار به رشته تبدیل می‌شود. چند پیاده‌سازی از icon قابلیت‌های سطح بالای گرافیکی، با رابط آسان کاربری وجود دارد.Icon مدیریت حافظه خودکار دارد، اشیا زمانی که به آن‌ها احتیاج هست، در طول اجرا ساخته می‌شوند. و فضا با garbage collection آزاد می‌گردد. تنها محدودیت در طول رشته‌ها و ساختارهای داده، میزان حافظه موجود است.کلمه Icon مخفف و بیان‌گر موضوع خاصی نیست. با این وجود وقتی این اسم را انتخاب می‌کردند به کلمه iconoclatis –به معنای بت‌شکنی - نیز اشاره‌هایی شد. این اسم قبل از این که این کلمه کاربرد کنونی خود را پیدا کند انتخاب شد. ممکن است بعضی‌ها فکر کنند که این زبان برای طراحی icon(نقشک) ساخته شده، ولی این‌طور نیست.Icon برای چه کارهایی خوب است؟.یک زبان همه منظوره مثل Icon به درد اکثر کارهای برنامه‌نویسی می‌خورد. به خصوص برای ساخت ابزارهای نرم‌افزاری برای پردازش روی متن، و برای برنامه‌های تحقیقاتی و مطالعاتی مناسب است.این زبان برای راحت‌تر ساختن برنامه‌نویسی درست شده‌است، روی ارزش زمان برنامه‌نویس و اهمیت سریع به کار افتادن برنامه توجه می‌کند. به صورت متداول این زبان برای کارهای کوتاه، کارهایی که یک بار می‌توان آن‌ها را انجام داد و انجام آن (نه کیفیت انجام) مهم است و کارهای بیش از حد پیچیده‌است.نحو پایه.زبان Icon از خانواده ALGOL زبان‌های برنامه‌نویسی ساخت یافته‌است مشتق شده‌است و بنابراین نحوی شبیه به C یا Pascal دارد. Icon بیشتر شبیه به Pascal است، از نحو := برای تخصیص، کلمه کلیدی procedure و نحو مشابه آن استفاده می‌کند. از طرف دیگر Icon از سبک پرانتزهای C برای ساخت یافته‌سازی گروه‌های اجرایی استفاده می‌کند و اجرای برنامه‌ها با رویه‌ای به نام main آغاز می‌شود. از خیلی جهات Icon همچنین خصوصیاتی شبیه به بسیاری از زبان‌های برنامه‌نویسی اسکریپتی دارد (مانند SNOBOL): الزامی برای تعریف متغیرها نیست، انواع به‌طور اتوماتیک تعیین می‌شوند، و اعداد می‌توانند به‌طور اتوماتیک به رشته‌ها تبدیل شوند و برعکس. ویژگی دیگری که در زبان‌های اسکریپتی رایج است، اما نه در همه آنها، استفاده از کاراکتر پایان خط است، در Icon، خط‌ها با نقطه و ویرگول پایان نمی‌یابند و اگر منطقی باشد با نقطه و ویرگول ضمنی پایان می‌یابند.رویه‌ها بلوک‌های پایه برنامه‌های Icon هستند، و اگرچه آن‌ها از نام‌گذاری Pascal استفاده می‌کنند اما بیشتر شبیه توابع C عمل می‌کنند و می‌توانند مقادیری را برگردانند، در Icon کلمه کلیدی function وجود ندارد. procedure doSomething(aString) write(aString) endاجرای هدف گرا.یکی از مفاهیم کلیدی Icon این است که ساختارهای کنترلی، به جای boolean منطقی در بسیاری از دیگر زبان‌های برنامه نویسی، بر اساس عبارات "success" یا "failure" پایه‌گذاری شده‌اند. در این الگو، مقایسه‌های ساده مانند if a "W" "Wikipedia"[3] ==&gt; "k" "Wikipedia"[0] ==&gt; "a" "Wikipedia"[1:3] ==&gt; "Wi" "Wikipedia"[-2:0] ==&gt; "ia" "Wikipedia"[2+:3] ==&gt; "iki"در آخرین مثال به جای بازه طول آن نشان داده شده‌است.در این جا چند کار دیگر که با رشته‌ها می‌توان انجام داد را می‌بینید: s := "abc" s[2] := "123""a123c"مقدار کنونی s است. s := "abcdefg" s[3:5] := "ABCD""abABCDefg" مقدار کنونی s است. s := "abcdefg" s[3:5] := """abefg" مقدار کنونی s است.ساختارهای دیگر.رشته‌های Icon لیست‌های ساده‌ای از کاراکترها هستند، مانند معادل آن‌ها در C. علاوه بر این، Icon به کاربر اجازه می‌دهد به آسانی لیست‌های خودش را ایجاد کند (یا آرایه‌ها) : aCat := ["muffins", "tabby", 2002, 8]آیتم‌های موجود در یک لیست می‌توانند از هر نوعی باشند، از جمله ساختارهای دیگر. برای ساختن سریع تر لیست‌های بزرگتر، Icon شامل مولد list است، i := list(10, "word") یک لیست که شامل 10 کپی از "word" است را تولید می‌کند.مانند آرایه‌ها در زبان‌های دیگر، Icon اجازه می‌دهد آیتم‌ها با موقعیت شان جستجو شوند. weight := aCat[4]Icon شامل توابع شبه پشته‌ای است، push و pop امکان ایجاد پشته‌ها و صف‌ها را فراهم می‌آورند.Icon همچنین شامل توابعی برای مجموعه‌ها و جدول هاست. (درهم سازی‌ها، آرایه‌های انجمنی، لغت‌نامه‌ها و...) symbols := table(0) symbols["there"] := 1 symbols["here"] := 2این کد جدولی که مقدار پیش‌فرض هر کلید ناشناخته آن صفر است ایجاد می‌کند. سپس دو آیتم را با کلیدهای "there" و "here" و مقادیر 1 و 2 به آن اضافه می‌کند.نمونه برنامه‌های زبان Icon. procedure main() while write(map(read(), &amp;ucase, &amp;lcase)) endاولین خط برنامه را شروع می‌کند.read و write توابعی هستند که یک خط را می‌خوانند یا می‌نویسند. map یک رابطه یک به یک با توجه به آرگومان‌های 2و3 جا به جا می‌شود.دو کلمه کلیدی &amp;ucase و &amp;lcase شامل کاراکترها ی حروف بزرگ و کوچک است while هم یک حلقه‌است که تا زمانی که عمل خواندن تمام نشده تکرار می‌شود. s = «All the world's a stage. And all the men and women merely players»; i = indexOf("the", s)این کد 4 را برمی گرداند. جای اولین باری که در آن the آمده‌است. i = indexOf("the", s, 5)این کد از جای 5 به بعد دنبال the می‌گردد. s = «All the world's a stage. And all the men and women merely players»; i = indexOf("the", s) while i != -1 { write(i); i = indexOf("the", s, i+1);در هر مرحله جای بعدی رشته the را بر می‌گرداند تا زمانی که پس از تمام کردن رشته s ناموفق باشد که تمام می‌شود.همین کد تحت Icon می‌تواند به این صورت نیز نوشته شود: s := «All the world's a stage. And all the men and women merely players» every write(find("the",s))findهر دفعه که فراخوانی شود، جای بعدی رشته the در s را می‌دهد. write(5 &lt;find("the", s))زمانی رشته را برمی‌گرداند که جایی که در آن the پیدا شده شماره‌اش از 5 بیشتر باشد. every k := i to j do write(someFunction(k))چرا از every جای while در این مورد استفاده شده؟چون while نتیجه اول را دوباره ارزیابی می‌کند در حالی که every همه نتایج را تولید می‌کند. عبارت every در واقع مقدارهای قبلی را به تابع می‌دهد، به عنوان مثال کد بالا می‌تواند به این صورت بازنویسی شود. every write(someFunction(i to j))