لوگو (زبان برنامه‌نویسی)

تاریخچه

اواسط دهه ۱۹۶۰ میلادی سیمور پپرت به همراه ماروین مینسکی آزمایشگاه هوش مصنوعی دانشگاه ام‌آی‌تی را راه‌اندازی کرد. پپرت با گروهی از شرکت بولت، برنک و نیومن (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های مفید است.

حوزه

لزومی به تعریف متغیرها قبل از استفاده از آن‌ها وجود ندارد، در نتیجه حوزه تعریف آن‌ها سراسری (global) است.
یک متغیر می‌تواند به صورت محلی تعریف شود، بنابراین حوزه تعریف آن محدود به همان رویه و رویه‌هایی که فراخوانی می‌کند است (حوزه پویا). فراخوانی یک رویه با ورودی‌هایش متغیرهای محلی ایجاد می‌کند که مقادیر آرگومان‌ها را نگه می‌دارند.

الگوی تکرار

لوگو تعدادی ساختار کنترلی مخصوص لیست دارد. ایده اصلی از دو لیست است:
   OPERATION [ a list of commands ] [ many data items ]
هر یک از دستورها به ترتیب روی هر یک از data itemها اجرا می‌شود. الگوهای دستور مختلفی با نام‌های MAP، APPLY، FILTER،FOREACH ، REDUCE و CASCADE وجود دارد.

لیست‌های خصوصیت

یک لیست خصوصیت لیستی است که در آن آیتم‌های با شماره فرد نشان‌دهنده اسم خصوصیت و آیتم‌های با شماره زوج نشان‌دهنده مقدار خصوصیت است. سه دستور برای پردازش لیست‌های خصوصیت وجود دارد:
   pprop :listname :name :value ;to add a new pair to the list
   remprop :listname :name :value ;to remove a pair to the list
   show gprop :listname :name  ;to get the matching value from the list

ورودی-خروجی

متن توسط دستور print روی جریان خروجی (صفحه دستور) و با دستور label روی صفحه گرافیکی نمایش داده می‌شود.
دستورهای استاندارد readlist readword readchar هستند که جریان ورودی آن‌ها صفحه کلید است. در سیستم‌های Unix جریان ورودی می‌تواند به یک فایل درون دیسک تغییر کند. به صورت مشابه جریان خروجی نیز می‌تواند عوض شود.

نحو

دستورها می‌توانند در یک یا چندین خط نوشته شوند. دستورهای زیادی نمادهای نمایش کوتاهتری دارند، مثلاً دستورهای FORWARD و RIGHT می‌توانند به صورت FD و RT نوشته شوند. این کار دشواری ورودی را کم می‌کند. از هر نوشته‌ای بعد از علامت نقطه-ویرگول؛ صرف‌نظر شده و به کاربر این امکان داده می‌شود که توضیحاتی برای برنامه بنویسد.
   FORWARD ۱۰۰ ; draws a square with sides 100 units long
   LEFT 90
   FORWARD 100
   LEFT 90
   FORWARD 100
   LEFT 90
   FORWARD 100
   LEFT 90
   FD 100 RT 120 FD 100 RT ۱۲۰ ; draws a triangle
   FD 100 RT ۱۲۰
یک برنامه Hello World در لوگو به این صورت است:
   print [Hello World]

حلقه‌ها

سه دستور تکرار (حلقه) در لوگو وجود دارد، یکی از آن‌ها repeat است. دستور زیر یک مربع رسم می‌کند:
   REPEAT ۴ [FD 100 LEFT ۹۰]
دستور  FD 100 LEFT ۹۰  چهار بار تکرار می‌شود. تقریبی از یک دایره می‌تواند با یک حلقه ۳۶۰ بار چرخش و گام به جلو رسم شود:  REPEAT ۳۶۰ [FD 1 RIGHT ۱] . امکان نوشتن حلقه‌های تودرتو نتایج خوبی را با زحمت کم به ما می‌دهد:
   REPEAT ۳۶[ RT 10 REPEAT ۳۶۰ [FD 1 RT ۱]]
   FD 25
   RT ۹۰

تأثیرات

لوگو تأثیر زیادی روی زبان برنامه‌نویسی اسمال‌تاک داشت. این زبان هم چنین تأثیر اولیه زبان و محیط آموزش برنامه‌نویسی Etoys است.

نسخه فارسی مفسر لوگو

سایت Turtle Academy نسخه‌ای فارسی از مفسر زبان لوگو را بهمراه مجموعه‌ای از درس‌ها ارائه کرده‌است.