Logo (程序設計語言)

Logo是一種電腦程式設計語言，在1966年由西摩爾·派普特和Wally Feurzeig設計，Logo一詞源自希臘語邏各斯（logos）。Logo是一種直譯語言，和其他語言不同的是，它內置一套海龜繪圖（Turtle Graphics）系統，通過向海龜發送命令，使用者可以直觀地學習程序的運行過程，因此很適於初學者特別是兒童學習程序設計。

Logo的原型來自另一個電腦語言LISP，派普特修改了LISP的語法使其更易於閱讀。Logo常被稱作沒有括號的Lisp。Logo繼承了Lisp的「表」的概念，所以在函數處理等方面擁有強大的能力，也是有特殊需求的電腦科學家的好幫手。

## 海龜繪圖

<image>

<image>

海龜繪圖使得Logo使用者可以通過簡單的編程創作出豐富多彩的視覺效果或圖案。假想一隻帶著畫筆的海龜可以接受簡單的命令，例如向前走100步，或者左轉30度。通過對這隻海龜發送命令，可以讓它繪製出較為複雜的圖形，例如正方形、三角形、圓等。

海龜的移動相對於它本身所在的位置。例如，命令`LT 90`意味著讓海龜左轉90度，站在海龜的角度來思考它將如何執行命令，使得程序設計更加形象化，也更易於理解。

## 程式實例

設計Logo的初衷是為了向兒童教授電腦編程技能。它亦適合用作數學教學。初學者可以不需要任何程式設計的知識而直接向海龜發送命令。學習海龜作圖將會讓使用者懂得一些關於幾何學方面的知識。而一旦掌握了海龜作圖的基礎之後，引入程式設計的概念也變得更加容易。下面看一個畫一個正方形的例子：

```logos
FD 100
LT 90
FD 100
LT 90
FD 100
LT 90
FD 100
LT 90
```

`FD`是前進，`LT`是左轉。由於輸入的語句都是重複的，可以用重複語句簡化為：

```logos
REPEAT 4 [FD 100 LEFT 90]
```

上面兩段程序得到的結果相同，由於第一個程式幾乎都是重複代碼，因此我們用`REPEAT`讓Logo重複同樣的命令4次，同時還使用了命令的縮寫。為了重複使用上述代碼，我們可以用`TO …… END`定義過程：

```logos
TO CHAIR 
  REPEAT 4 [FD 100 RT 90] FD 200 
END
```

一旦定義了`CHAIR`過程，就可以直接使用調用它得到結果，為了使得這個過程更加通用化，我們傳遞一個邊長參數：

```logos
TO CHAIR :long
  REPEAT 4 [FD :long RT 90]
  FD :long*2
END
CHAIR 100
```

從簡單地發送繪圖命令，到定義一個通用的繪製多邊形的過程，使用者不但掌握了程序設計上的一些基本思想（傳遞參數、重複等），而且對幾何學上正多邊形的理解也加深了。

## 多代理建模語言

Logo的方言NetLogo、StarLogo進一步深化了Logo的海龜繪圖概念，可以產生出成百上千個獨立的海龜（被稱為代理）來模擬諸如物理、生物或社會等複雜系統。建模者可以對眾多海龜並行發送指令，來觀察微觀個體行為與個體之間相互影響產生的宏觀樣式之間的聯繫。

## LOGO直譯器列表

- UCBLogo，又叫Berkeley Logo，用C語言寫成，可運行於多個平台。
- MSWLogo，有良好的GUI、詳盡的說明文件，運行於Windows，建基於Berkeley Logo，由Borland C++寫成。它支援三維圖像、聲響、鍵盤等多個功能。
- StarLogo
- NetLogo
- Comenius Logo
- rLogo，可於瀏覽器上執行（需Java）
- CLogo，可用中文為指令（需要Java）
- Galapago，用Java寫成
- ProLOGO，用Prolog寫成，可用義大利語為指令
- PyLogo，用Python寫成
- SharpLOGO，用C#寫成
- XLogo，用Objective-C寫成，運行於macOS
- Logo++，可說是一種精簡化的Logo，主要的分別在於沒有了Logo的即時回應（interactive）、去掉了不少語法。

## 延伸閱讀

- The Great Logo Adventure, Jim Muller, Doone Publications ; now out of print; downloadable free of charge in pdf form from The MSWLogo website, along with the freeware MSWLogo program
- To Artificial Intelligence (1976) Early AI textbook where Logo is used extensively. (Using the Edinburgh University dialect, AI2LOGO)
- Turtle Geometry Abelson and diSessa
- Children Designers, Idit Harel Caperton, Ablex Publishing Corporation . Available online
- Learning With Logo, Daniel Watt, McGraw Hill, . Available Through Amazon
- Teaching With Logo: Building Blocks For Learning, Molly Watt and Daniel Watt, Addison Wesley (now Pearson) 1986, Available through Amazon

## 外部連結

- Logo Interpreter
- papert: logo in your browser
- Online PHP-based Logo Interpreter
- MachineLab TurtleSphere (MaLT) Online LOGO Interprepter with 3D graphics using three.js javascript library.
- Vlad Tudor's Free Online Logo Interpreter using HTML5, CSS3 and JQuery
- TurtleAcademy (Learn Logo for free)
- XLogo4Schools is a revised version of XLogo
- XLogoOnline is a modern, browser-based programming environment for the primary school. The programming language is a subset of the XLogo dialect. In addition to the online version, offline versions are available for Windows, macOS and Linux.
- DR Logo at CPCWiki
- WIN-LOGO 3.0 of a German Author in English and German language
- POOL is a compiled LOGO dialect
- QLogo
- Digitool, producers of ObjectLOGO
- turtleSpaces is an OpenGL re-implementation and broad extension of Apple (LCSI) Logo II intended for making 3D models, animations and games. It is currently available for Windows, macOS and Linux.

## 基本資料

- 日語原文：Logo
- 域：MSWLogo海龜繪圖示例gif動畫
- 編程范型：多范型: 函數式, 教育, 過程式, 反射式
- 語言家族：Lisp
- 設計者：Wally Feurzeig, Seymour Papert, Cynthia Solomon
- 開發者：Bolt, Beranek and Newman
- 發行日期：1967年
- 類型系統：動態
- 軟體實現：UCBLogo, 很多其他實現
- dialects：StarLogo, NetLogo, AppleLogo
- 施影響於：AgentSheets, NetLogo, Smalltalk, Etoys, Scratch, Microsoft Small Basic, KTurtle, REBOL, Boxer
- 受影響於：Lisp