آیسوییم (زبان برنامهنویسی)
آیسوییم (به انگلیسی: ISWIM) یک زبان برنامهنویسی (یا یکی از اعضای خانوادهٔ زبانهای برنامهنویسی) انتزاعی است که به وسیلهٔ پیتر لندین ابداع شد و برای اولین بار در مقالهای به نام "۷۰۰ زبان برنامهنویسی آینده" که در Communications of the ACM منتشر شد، توصیف شد. نام این زبان یعنی ISWIM، مخفف "If you See What I Mean" (اگر شما منظور مرا فهمیدید) است.
اگر چه این زبان هنوز پیادهسازی نشدهاست، ثابت کردهاست که در توسعهٔ زبانهای برنامهنویسی به خصوص در زبانهای تابعی مانند SASL، هسکل، میراندا و امال و جایگزینهایشان، بسیار مؤثر بودهاست.
آیسوییم یک زبان امری به همراه یک هستهٔ تابعی است که از عبارتهایی برای خوانایی بیشتر از نوع حساب لامبدا استفاده میکند که این امکان داشتن متغیرهای قابل تغییر و تخصیص و یک ساختار کنترلی قدرتمند (عملگر J) را میدهد.
معانی عملیاتی آیسوییم از ماشین مجازی SECD و فراخوانی با مقدار استفاده میکند که آن ارزیابی مشتاق است. یکی از اهداف آیسوییم این بود که بیشتر به نمادهای ریاضی شباهت داشته باشد؛ بنابراین Landin سمی کالن بین عبارتها و بلوکهای begin end را با قانون off-side و حوزه بر مبنای دندانه گذاری، جایگزین کرد. یکی از تفاوتهای آیسوییم در نمادگذاری استفاده از where clauseها است. یک برنامهٔ آیسوییم از یک عبارت تنها که باwhere clause واجد شرایط شدهاست، عبارتهای شرطی و تعریف توابع تشکیل شدهاست. با CPL این زبان یکی از اولین زبانهای برنامهنویسی بود که از where clauseها استفاده کرد.
یکی از ویژگیهای معنایی قابل توجه این زبان امکان تعریف انواع دادهای جدید به عنوان مجموع حاصل ضربها با قابلیت بازگشتی بود. متغیرهای آی سوییم اعلان صریح ندارند، و به نظر میرسد که احتمالاً (هر چند یه طور صریح در مقالهٔ ۱۹۶۶ بیان نشدهاست) Landin قصد داشته که زبان با تایپ پویا باشد، مانند زبان لیسپ و بر خلاف الگول. اما این احتمال هم وجود دارد که او در نظر داشته تا نوعی از تایپ استنتاجی را توسعه دهد.
برای پیادهسازی مستقیم این زبان تلاشی نشدهاست، ولی زبان PAL مربوط به Art Evan و زبان Gedanken مربوط به John C. Reynolds، بسیاری از مفاهیم Landin مانند عملیات انتقال کنترل قوی را دارند. هر دوی اینها تایپ پویا دارند. زبان امال مربوط به Milner (بدون عملگر J و به همراه type inference) را میتوانیم به عنوان یک معادل برای این زبان در نظر بگیریم.
یکی دیگر از معایب این زبان اضافه کردن قابلیتهای زبان امری (مانند عملگر J و تخصیص) است که دیگر آن را از یک زبان خالص تابعی دور میکند و بعد از آن ممکن است روش ارزیابی آن به به ارزیابی تنبل تبدیل شود. این روش زبانهای برنامهنویسی دیگری مانند: SASL، هستکل، میراندا، Clean و KRC Kent recursive calculator را هدایت کردهاست.