لوگو (زبان برنامه‌نویسی)
لوگو یک زبان برنامه‌نویسی برای برنامه‌نویسی تابعی است. این زبان نسخه‌ای از زبان لیسپ است که برخی آن را لیسپ بدون پرانتز می‌نامند. امروزه این زبان با لاک‌پشت گرافیکش شناخته می‌شود، اما لوگو قابلیت‌های خوبی نظیر کار با لیست، فایل، ورودی/خروجی و حلقه‌ها دارد. لوگو در سال ۱۹۶۷ با اهداف آموزشی خصوصاً آموزش سازنده‌گرا طراحی شد. طراحان این زبان دانیل بابرو، والاس فرزیگ و سیمور پپرت هستند.
اواسط دهه ۱۹۶۰ میلادی سیمور پپرت به همراه ماروین مینسکی آزمایشگاه هوش مصنوعی دانشگاه ام‌آی‌تی را راه‌اندازی کرد. پپرت با گروهی از شرکت بولت، برنک و نیومن (BBN) که توسط والاس فرزیگ رهبری می‌شد همکاری کرد و در سال ۱۹۶۷ اولین نسخه زبان لوگو به وجود آمد. در چهار سال اول، آموزش و تحقیقات روی این زبان در شرکت BBN انجام شد. اولین پیاده‌سازی این زبان که گوست نامیده می‌شود به‌وسیله لیسپ نوشته شد. هدف گوست آموزش حل مسئله بود و کودکان می‌توانستند در یک محیط ریاضیاتی کار با کلمات و جمله‌ها را یاد بگیرند. لاک‌پشت ویرایشگر بازخورد سریعی می‌داد تا اشکالات برنامه مشخص شود. هدف از آموزش کودکان در زمینهٔ فناوری ، درگیر کردن آن‌ها در فعالیت‌های هدفمند است تا ضمن جذب مهارت‌ها و مفاهیم موجود کودکان ، به سمت دانش سطح بالا (پیشرفته) و اندیشهٔ انتقادی ناشی از فرایندها و تولیدات فنی سوق داده شوند. تلاش برای فهم و به‌کارگیری فرایندها ( شامل تصمیم‌گیری در بارهٔ انتخاب و به‌کارگیری فناوری‌های مناسب ؛ طراحی ، و ساخت و ارزیابی تولیدات و فرایندهای فنی ؛ اجرا و توسعهٔ مواد ، اطلاعات و سیستم‌ها ) و فناوری‌های نوین ، مطمئناً اولین چالش خواهد بود (1996,X) . اغلب تاکیدات بر استفاده از رایانه به عنوان ابزاری برای بهره وری و حل مسئله در یک محیط یادگیری سازنده است که عمدتاً ، استانداردها به‌طور روشنی ، تعریف شده‌اند . اما " ادغام رباتیک در کلاس " برای بهبود تفکر انتقادی و ترویج یادگیری سطح بالا ، یکی از حوزه‌هایی که کمتر به آن توجه شده‌است (Chambers and et al, xxxx ) و امروزه نسبتاً بلا استفاده مانده‌است. ایدهٔ استفاده از رباتیک در کلاس ، براساس فعالیت‌های پژوهشی سیمور پاپرت ( Seymour Papert ) - پدر زبان برنامه‌نویسی لگو (Lego) - است . لگو برای استفادهٔ کودکان و بر اساس دیدگاه پیاژه (1964) مبنی بر اینکه مفاهیم انتزاعی را می‌توان با بررسی‌های اکتشافی دستی ( تجربه عملی ) یادگرفت ، طراحی شد. از نظر پاپرت ، کودکان فعالانه ساختارهای فکری خود را می سازند و توانایی یادگیری استفاده از زبان برنامه‌نویسی و رایانه را دارند که یک مهارت پایه برای یادگیری هر چیزی است (1996,X) . در برنامه‌نویسی با مؤلفه‌ای تحت عنوان " معناسازی " روبرو هستیم ، هر نشانه در برنامه ، معنایی دارد و دانش آموزان فهم خود را از این نشانه‌ها در ذهن می سازند (2006Ricca and et all,)(ترجمه پرستو علیخانی)
در حال حاضر لوگو تفاوت چندانی با ایده‌های اولیه قبل از اولین لاک‌پشت ندارد. در اوایل طراحی این زبان یک روبوت به شکل لاک‌پشت با توجه به دستورهای نوشته شده در کامپیوتر روی زمین حرکت می‌کرد. اولین روبوت لاک‌پشت در سال ۱۹۶۹ در ام‌آی‌تی به‌وجود آمد. این روبوت که ایروینگ نام داشت دارای حسگرهای لمسی بوده و می‌توانست به عقب، جلو، راست و چپ حرکت کرده یا زنگ خود را به صدا درآورد. بعدها روبوت لاک‌پشت حذف و به نمایشگر کامپیوتر منتقل شده و با دستورهایی شکل و طرح‌هایی را رسم می‌کرد.
مشهورترین خصوصیت لوگو نشانه‌گر به شکل لاک‌پشت آن است که می‌توان دستور حرکت یا کشیدن شکل به آن داد و با توجه به برنامه خطوط گرافیکی رسم می‌کند. این نشانه‌گر معمولاً به شکل یک لاک‌پشت یا یک مثلث نشان داده می‌شود. لاک‌پشت گرافیکی در اواخر دهه ۱۹۶۰ میلادی توسط سیمور پپرت به لوگو اضافه شد تا نسخه دارای روبوت لاک‌پشت را پشتیبانی کند. این روبوت لاک‌پشت یک روبوت ساده بود که از ایستگاه کاری کاربر کنترل می‌شد و دستورهایی برای رسم اشکال به روبوت که دارای یک قلم درون خود یا چسبیده به آن بود می‌داد.
استفاده از هندسه لاک‌پشت به جای یک مدل مرسوم‌تر، حرکت منطقی روبوت لاک‌پشت را تقلید می‌کند. هندسه لاک‌پشت با (x،y) ای که در هندسه کارتزین استفاده می‌شود، تفاوت دارد و بیشتر در یک فضای اقلیدسی کار می‌کند (با استفاده از اندازه‌ها و زوایای نسبی و بدون مبدأ و متفاوت از سیستم‌های با دستگاه مختصات). لاک‌پشت با دستورهایی نسبت به مکان فعلی خودش حرکت می‌کند. LEFT ۹۰ به این معناست که ۹۰ درجه به سمت چپ بچرخ. یک دانش‌آموز با فرض اینکه اگر جای لاک‌پشت باشد باید چه حرکتی انجام دهد، می‌تواند حرکت لاک‌پشت را بفهمد (پیش‌بینی و دربارهٔ آن استدلال کند). پپرت این موضوع را استدلال سازگار با محیط نامید. بعضی از پیاده‌سازی‌های لوگو، به خصوص آنهایی که اجازه وجود چند لاک‌پشت را می‌دهند، ردیابی برخورد (collision detection) را پشتیبانی کرده و اجازه می‌دهند کاربر نمایش نشانه‌گر لاک‌پشت را دوباره تعریف کند.
لوگو معمولاً به عنوان زبانی مفسری شناخته می‌شود، با این حال اخیراً برخی نسخه‌های کامپایلی لوگو مانند Lhogho و Liogo نیز ساخته شده‌است. لوگو حساس به بزرگ یا کوچک بودن حروف نیست ولی حالت را برای فرمت کردن نگه می‌دارد. لوگو مصالحه‌ای بین زبان برنامه‌نویسی ترتیبی با ساختار بلوکی و زبان برنامه‌نویسی تابعی است. لوگوی استانداردی وجود ندارد، اما UCBLogo به‌شدت مورد توجه‌است. این زبان برای آموزش برنامه‌نویسی به کار می‌رود، اما به خاطر امکانات خوب کار با لیست‌ها زبان بسیار خوبی برای ایجاد scriptهای مفید است.
سه نوع تایپ داده در UCBLogo وجود دارد: اعداد حالت خاصی از کلمه هستند.
تایپ‌دهی صریح وجود ندارد و مفسر نوع داده را از متن برنامه به‌دست می‌آورد.
دو نماد مهم وجود دارد: این نماد برای آموزش این مفهوم که هر متغیر مکانی در حافظه دارد بسیار مفید است. یک عدد حالت خاص ارزیابی خود است. ۲ همان "۲ است.
انتساب به متغیرها (مثلاً codice_1) در لوگو با دستور codice_2 انجام می‌شود:
و یا:
دستور codice_2 دو ورودی می‌گیرد که در اینجا ورودی دوم codice_4 است. codice_5 یک عملگر است و دو پارامتر می‌گیرد. codice_6 به codice_7 ارزیابی شده و codice_8 محتویات خانه با نام codice_9 را برمی‌گرداند. این دو مقدار با یکدیگر جمع شده و یک مقدار جدید را می‌دهند.
دستور codice_2 نتیجه را در ورودی اول قرار می‌دهد. از دیدگاه برنامه‌نویسی پارامتر اول codice_2 از نوع انتقال آدرس (pass by reference) و پارامتر دوم از نوع انتقال مقدار (pass by value) است.
لزومی به تعریف متغیرها قبل از استفاده از آن‌ها وجود ندارد، در نتیجه حوزه تعریف آن‌ها سراسری (global) است.
یک متغیر می‌تواند به صورت محلی تعریف شود، بنابراین حوزه تعریف آن محدود به همان رویه و رویه‌هایی که فراخوانی می‌کند است (حوزه پویا). فراخوانی یک رویه با ورودی‌هایش متغیرهای محلی ایجاد می‌کند که مقادیر آرگومان‌ها را نگه می‌دارند.
لوگو لیست را از لیسپ گرفته‌است و لیست‌ها روش اولیه ذخیره‌سازی بردارهاست.
آرایه نیز در این زبان پشتیبانی شده‌است:
لوگو ساختارهای کنترلی مختلفی دارد:دستورهای تکرار لوگو عبارتند از:
لوگو تعدادی ساختار کنترلی مخصوص لیست دارد. ایده اصلی از دو لیست است:
هر یک از دستورها به ترتیب روی هر یک از data itemها اجرا می‌شود. الگوهای دستور مختلفی با نام‌های MAP، APPLY، FILTER،FOREACH ، REDUCE و CASCADE وجود دارد.
یک لیست خصوصیت لیستی است که در آن آیتم‌های با شماره فرد نشان‌دهنده اسم خصوصیت و آیتم‌های با شماره زوج نشان‌دهنده مقدار خصوصیت است. سه دستور برای پردازش لیست‌های خصوصیت وجود دارد:
متن توسط دستور print روی جریان خروجی (صفحه دستور) و با دستور label روی صفحه گرافیکی نمایش داده می‌شود. دستورهای استاندارد readlist readword readchar هستند که جریان ورودی آن‌ها صفحه کلید است. در سیستم‌های Unix جریان ورودی می‌تواند به یک فایل درون دیسک تغییر کند. به صورت مشابه جریان خروجی نیز می‌تواند عوض شود.
دستورها می‌توانند در یک یا چندین خط نوشته شوند. دستورهای زیادی نمادهای نمایش کوتاهتری دارند، مثلاً دستورهای codice_12 و codice_13 می‌توانند به صورت codice_14 و codice_15 نوشته شوند. این کار دشواری ورودی را کم می‌کند. از هر نوشته‌ای بعد از علامت نقطه-ویرگول؛ صرف‌نظر شده و به کاربر این امکان داده می‌شود که توضیحاتی برای برنامه بنویسد.
یک برنامه Hello World در لوگو به این صورت است:
سه دستور تکرار (حلقه) در لوگو وجود دارد، یکی از آن‌ها codice_16 است. دستور زیر یک مربع رسم می‌کند:
دستور codice_17 چهار بار تکرار می‌شود. تقریبی از یک دایره می‌تواند با یک حلقه ۳۶۰ بار چرخش و گام به جلو رسم شود: codice_18. امکان نوشتن حلقه‌های تودرتو نتایج خوبی را با زحمت کم به ما می‌دهد:
هر خط از یک برنامه از فراخوانی توابع یا در اصطلاح برنامه‌نویسی زیربرنامه‌هایی تشکیل شده‌است. دو نوع زیربرنامه وجود دارند: یک دستور مانند یک رویه در زبان پاسکال است. مجموعه‌ای از دستورهای به نام گزاره‌ها که بعد از اجرا کلمه codice_23 یا codice_24 را برمی‌گردانند با حرف p تمام می‌شوند. مثالهای آن codice_25 ، codice_26 و codice_27 است. رویه‌ها می‌توانند با جفت codice_28تعریف شوند:
TO CHAIR REPEAT ۴ [FD 100 RT ۹۰] FD 200 END
لوگو می‌تواند با دستور codice_29 یک ویرایشگر را فراخوانی کند. در ویرایشگر دستورهای یک رویه می‌توانند در خطوط مختلفی نوشته شوند.
EDALL
کلمه جدید وارد لغات قابل استفاده می‌شود ولی تعریف آن با تمام شدن session از بین می‌رود. هر بار کلمه codice_30 استفاده شود دنباله codice_31اجرا می‌شود. کلمه codice_30 بعد از این می‌تواند به‌عنوان یک دستور اجرا شود. مثلاً codice_33عمل codice_30 را ۴ بار تکرار می‌کند. عبارات ریاضی در لوگو از نمایش پیشوندی مانند codice_35، codice_36، codice_37 و codice_38 استفاده می‌کنند. نمایش میانوندی نیز موجود است. لوگو اجازه فراخوانی بازگشتی توابع را نیز می‌دهد:
to spiral :size لوگو تأثیر زیادی روی زبان برنامه‌نویسی اسمال‌تاک داشت. این زبان هم چنین تأثیر اولیه زبان و محیط آموزش برنامه‌نویسی Etoys است.
سایت Turtle Academy نسخه‌ای فارسی از مفسر زبان لوگو را بهمراه مجموعه‌ای از درس‌ها ارائه کرده‌است.
دانشنامه آزاد انگلیسی
صفحه اصلی زبان لوگو