لوگو (زبان برنامهنویسی): تفاوت میان نسخهها
محتوای حذفشده محتوای افزودهشده
جز ویرایش Hamidrezajfr (بحث) به آخرین تغییری که JYBot انجام داده بود واگردانده شد |
جز ربات ردهٔ همسنگ (۲۴) +نشانی+املا+مرتب+تمیز (۸.۸): + رده:زبانهای برنامهنویسی آموزشی |
||
خط ۱:
{{جعبه اطلاعات-نیاز|تاریخ=نوامبر ۲۰۱۲}}
'''لوگو''' یک زبان برنامه نویسی برای [[برنامهنویسی تابعی]] است. این زبان نسخهای از زبان [[لیسپ]] است که برخی آن را لیسپ بدون پرانتز مینامند. امروزه این زبان با لاکپشت گرافیکش شناخته میشود، اما لوگو قابلیتهای خوبی نظیر کار با لیست، فایل، ورودی/خروجی و حلقهها دارد.
لوگو در سال ۱۹۶۷ با اهداف آموزشی
== تاریخچه ==
اواسط دهه ۱۹۶۰ میلادی سیمور پپرت به همراه [[ماروین مینسکی]] آزمایشگاه هوش مصنوعی [[دانشگاه امآیتی]] را راهاندازی کرد. پپرت با گروهی از شرکت بولت، برنک و نیومن (BBN) که توسط والاس فرزیگ رهبری میشد همکاری کرد و در سال [[۱۹۶۷ (میلادی)|۱۹۶۷]] اولین نسخه زبان لوگو به وجود آمد. در چهار سال اول، آموزش و تحقیقات روی این زبان در شرکت BBN انجام شد. اولین پیادهسازی این زبان که گوست نامیده میشود بهوسیله لیسپ نوشته شد. هدف گوست آموزش حل مسئله بود و کودکان میتوانستند در یک محیط ریاضیاتی کار با کلمات و جملهها را یاد بگیرند. لاکپشت ویرایشگر بازخورد سریعی میداد تا اشکالات برنامه مشخص شود.
در حال حاضر لوگو تفاوت چندانی با ایدههای اولیه قبل از اولین لاکپشت ندارد. در اوایل طراحی این زبان یک روبوت به شکل لاکپشت با توجه به دستورات نوشته شده در کامپیوتر روی زمین حرکت میکرد. اولین روبوت لاکپشت در سال ۱۹۶۹ در [[دانشگاه امآیتی|امآیتی]] بهوجود آمد. این روبوت که ایروینگ نام داشت دارای حسگرهای لمسی بوده و میتوانست به عقب، جلو، راست و چپ حرکت کرده و یا زنگ خود را به صدا درآورد. بعدها روبوت لاکپشت حذف و به نمایشگر کامپیوتر منتقل شده و با
== طراحی ==
مشهورترین خصوصیت لوگو نشانهگر به شکل لاکپشت آن است که میتوان دستور حرکت و یا کشیدن شکل به آن داد و با توجه به برنامه خطوط گرافیکی رسم میکند. این نشانهگر معمولاً به شکل یک لاکپشت یا یک مثلث نشان داده میشود. لاکپشت گرافیکی در اواخر دهه ۱۹۶۰ میلادی توسط سیمور پپرت به لوگو اضافه شد تا نسخه دارای روبوت لاکپشت را پشتیبانی کند. این روبوت لاکپشت یک روبوت ساده بود که از ایستگاه کاری کاربر کنترل میشد و
استفاده از هندسه لاکپشت به جای یک مدل مرسومتر، حرکت منطقی روبوت لاکپشت را تقلید میکند. هندسه لاکپشت با (x،y) ای که در هندسه کارتزین استفاده میشود، تفاوت دارد و بیشتر در یک فضای اقلیدسی کار میکند (با استفاده از اندازهها و زوایای نسبی و بدون مبدا و متفاوت از سیستمهای با دستگاه مختصات). لاکپشت با
لوگو معمولاً به عنوان زبانی مفسری شناخته میشود، با این حال
=== داده ===
خط ۲۴:
دو نماد مهم وجود دارد:
* علامت دونقطه که نشاندهنده محتوا است.
این نماد برای آموزش این مفهوم که هر متغیر مکانی در حافظه دارد بسیار مفید است.
سطر ۳۰ ⟵ ۲۹:
یک عدد حالت خاص ارزیابی خود است. ۲ همان "۲ است.
انتساب به متغیرها (
{{
make "x sum :y ۳
{{پایان
و یا:
{{
make "x sum :y "۳
{{پایان
دستور <code>make</code> دو ورودی میگیرد که در اینجا ورودی دوم <code>sum :y "۳</code> است.
دستور <code>make</code> نتیجه را در ورودی اول قرار میدهد. از دیدگاه برنامهنویسی پارامتر اول <code>make</code> از نوع انتقال آدرس (pass by reference) و پارامتر دوم از نوع انتقال مقدار (pass by value) است.
سطر ۴۹ ⟵ ۴۸:
یک متغیر میتواند به صورت محلی تعریف شود، بنابراین حوزه تعریف آن محدود به همان رویه و رویههایی که فراخوانی میکند است (حوزه پویا). فراخوانی یک رویه با ورودیهایش متغیرهای محلی ایجاد میکند که مقادیر آرگومانها را نگه میدارند.
====
لوگو لیست را از لیسپ گرفتهاست و لیستها روش اولیه ذخیرهسازی بردارهاست.
سطر ۵۹ ⟵ ۵۸:
==== دستورات ساختار کنترلی ====
لوگو ساختارهای کنترلی مختلفی دارد:
{{
* ifelse test [ do_if_true list ] [do_if_false list]
{{پایان
دستورهای تکرار لوگو عبارتند از:
{{
* while condition [instruction list]
* until condition [instruction list ]
* repeat number [instruction list]
{{پایان
==== الگوی تکرار ====
لوگو تعدادی ساختار کنترلی مخصوص لیست دارد. ایده اصلی از دو لیست است:
{{
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
{{پایان
=== ورودی-خروجی ===
سطر ۸۹ ⟵ ۸۸:
== نحو ==
دستورات میتوانند در یک یا چندین خط نوشته شوند. دستورات زیادی نمادهای نمایش کوتاهتری دارند،
{{
FORWARD ۱۰۰ ; draws a square with sides 100 units long
LEFT 90
سطر ۱۰۲ ⟵ ۱۰۱:
FD 100 RT 120 FD 100 RT ۱۲۰ ; draws a triangle
FD 100 RT ۱۲۰
{{پایان
یک برنامه Hello World در لوگو به این صورت است:
{{
print [Hello World]
{{پایان
=== حلقهها ===
سه دستور تکرار (حلقه) در لوگو وجود دارد، یکی از آنها <code>repeat</code> است. دستور زیر یک مربع رسم میکند:
{{
REPEAT ۴ [FD 100 LEFT ۹۰]
{{پایان
دستور <code> FD 100 LEFT ۹۰ </code> چهار بار تکرار میشود. تقریبی از یک دایره میتواند با یک حلقه ۳۶۰ بار چرخش و گام به جلو رسم شود:
{{
REPEAT ۳۶[ RT 10 REPEAT ۳۶۰ [FD 1 RT ۱]]
FD 25
RT ۹۰
{{پایان
=== توابع و زیربرنامهها ===
هر خط از یک برنامه از فراخوانی توابع و یا در اصطلاح برنامهنویسی زیربرنامههایی تشکیل شدهاست. دو نوع زیربرنامه وجود دارند:
*
* اعمالی که مقداری را به عنوان خروجی برمیگردانند، مانند <code>first</code> ، <code>sum</code> و <code>readlist</code>
یک دستور مانند یک رویه در زبان پاسکال است. مجموعهای از دستورات به نام گزارهها که بعد از اجرا کلمه <code>true</code> یا <code>false</code> را برمیگردانند با حرف p تمام میشوند. مثالهای آن <code>wordp</code> ، <code>emptyp</code> و <code>listp</code> است.
* عبارات میتوانند اولیه بوده و یا توسط کاربر تعریف شوند.
* عبارات میتوانند صفر، یک و یا تعداد بیشتری پارامتر ورودی داشته باشند.
رویهها میتوانند با جفت
{{
TO CHAIR
{{پایان
لوگو میتواند با دستور <code>EDALL</code> یک ویرایشگر را فراخوانی کند. در ویرایشگر دستورات یک رویه میتوانند در خطوط مختلفی نوشته شوند.
{{
EDALL
سطر ۱۳۸ ⟵ ۱۳۷:
REPEAT ۴ [FD 100 RT ۹۰] FD 200
END
{{پایان
کلمه جدید وارد لغات قابل استفاده میشود ولی تعریف آن با تمام شدن session از بین میرود. هر بار کلمه <code>CHAIR</code> استفاده شود دنباله <code> REPEAT ۴ [FD 100 RT ۹۰]
عبارات ریاضی در لوگو از نمایش پیشوندی مانند <code>sum :x :y</code>، <code>product :x :y</code>، <code>difference :x :y</code> و <code>quotient :x :y</code> استفاده میکنند. نمایش میانوندی نیز موجود است.
لوگو اجازه فراخوانی بازگشتی توابع را نیز میدهد:
{{
to spiral :size
if :size
fd :size rt ۱۵ ; many lines of action
spiral :size *۱٫۰۲ ; the tailend recursive call
end
{{پایان
== تاثیرات ==
سطر ۱۵۴ ⟵ ۱۵۳:
== منابع ==
{{پانویس}}
دانشنامه آزاد انگلیسی [
صفحه اصلی زبان لوگو [http://el.media.mit.edu/Logo-foundation/index.html]
خط ۱۶۳:
[[رده:خانواده زبان برنامهنویسی لیسپ]]
[[رده:زبانهای برنامهنویسی آکادمیک]]▼
[[رده:رباتیک در ۱۹۶۷ (میلادی)]]
[[رده:زبانهای برنامهنویسی]]
▲[[رده:زبانهای برنامهنویسی آکادمیک]]
[[رده:زبانهای برنامهنویسی آموزشی]]
[[رده:زبانهای تابعی]]
|