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