Logo入门

 

倍受欢迎的Logo计算机语言,其文化来源涉及到一个小海龟—— 最早是在地板上移动的一个仿生机器人。(译注:像是今天的扫地机器人)

Student at computer它可以直接通过电脑输入的命令来控制。 命令 向前100步 则小海龟 以一条直线前进100个“海龟步”。 向右转45度 小海龟向右顺时针旋转45度并留在 相同的地方。 然后 向前50步 它将会在新方向前进50步。

仅仅依靠这两个命令 forward (向前) right (向右转) , 小海龟能以任何路径在地板上移动。同时小海龟带有一支笔可以接触在地板上,以便留下自己旅行的足迹。 用这只笔,海龟 可以画出几何图形,图片,和各种各样的设计图样。

(译注:Logo是英语环境下发明的,默认命令都是英文的,也有些版本的Logo支持中文命令。本文涉及到的命令都以英文形式给出,并在小括号中附注中文注解,试验的时候不需要敲入中文注解。这些英文命令包括 forward 向前, right 向右转,repeat 重复,to 定义,end 结束, stop 停止 forever 永久)

 

从地板上跑到到屏幕上

我们的小海龟迁移到电脑屏幕上, 用图形代表这个小生命 。 查看屏幕就像从上往下看活动的小海龟。

屏幕龟也理解 向前 向右转 (后面我们为了方便,数字后将省略单位"步"和转动角度单位"度")。

forward 50 (向前50步)

right 45 (向右转45度)

forward 25 (向前25步)

经过一些随意探索之后,通常海龟第一次正式活动是画一个几何形状。 如何 画一个正方形呢?

forward 50 (向前 50)

right 90 (向右转 90)

forward 50 (向前 50)

right 90 (向右转 90)

forward 50 (向前 50)

right 90 (向右转 90)

forward 50 (向前 50)

right 90 (向右转 90)

还有一个 重复 命令 repeat , 这样

repeat 4 [ forward 50 right 90 ] (重复4次 [向前50 向右转90])

也会画了一个正方形。

那么画一个三角形呢?

repeat 3 [ forward 50 right 60 ] (重复3 [向前50 向右转60])

哦! 即使这样也很好。 反复调试是用Logo来工作的一部分。

Logo的另一个重要用法是定义新的程序。 我们使用指令画了一个正方形

repeat 4 [forward 50 right 90] (重复4[向前50 向右转90])

但是如果我们告诉Logo 说画一个

正方形 (square)

Logo回应我们消息:

我不知道什么是“square(正方形)"

所以我们教Logo一个新的词。

to square (定义 正方形)
repeat 4 [ forward 50 right 90 ] (重复 4 [向前 50 向右转 90])
end (结束)

现在如果我们输入 square 然后Logo就会让小海龟画了一个正方形,好像我们已经输入 repeat 4 [ forward 50 right 90 ] (重复 4 [向前 50 向右转 90]) 。 这样Logo已经 学会一个新单词。

forward 50 (向前 50)

square (正方形)

现在square 就是Logo的新词汇, 这个新单词可以作为另一个指令的一部分。 例如

我们可以给这个命名为花朵,英语单词是 flower。

to flower
(定义 花朵)
repeat 36 [right 10 square]
(重复36 [ 向右转10 正方形])
end (结束)

repeat 36 [ right 10 square]
(重复36 [ 向右转10 正方形])

在Logo里面,编程是通过添加新单词到已知的词汇中。 就像学习一门语言,用你已经知道的单词定义新的单词。

还可以增加更复杂的功能。 例如程序里可以采取“输入”变量,可以接受不同的数值。 我们可以写一个新式样的正方形,接受不同大小(英语中大小的单词是size) (译注: 这种变量用”:"开头来加以区别) square 这样定义:

to square :size
(定义 正方形: 大小变量)

repeat 4 [forward :size right 90]
(重复4 [向前: 大小变量 向右转90])

end (结束)

不同于总是画一个固定50步为边长的正方形,我们可以告诉它画多大的正方形:

square 50

square 30

square 100

还有更多玩法,定义螺旋(spiral),:

to spiral :size :angle
(定义 螺旋 :大小变量 :角度变量)

if :size > 100 [ stop ]
(如果 :大小变量 > 100 [停止])

forward :size
(向前 :大小变量)

right :angle
(向右转 :角度变量)

spiral :size+2 :angle (螺旋 :大小变量+2 :角度变量)
end (结束)

spiral 0 90

spiral 0 91

传统的欧氏几何(译者注:欧氏几何是古希腊数学家欧几里得建立的几何学)是建立在抽象之上的,例如点:没有大小; 线:有长度,但没有厚度。这是年轻的小朋友们初学时候很难把握理解的。 小海龟是一个可以看到和操作的具体对象。 在分析几何形状时候取决于外部的参照系——坐标系统。 相比之下, 小海龟几何是“身体通感的”。 当小海龟围绕您旅行,您可以识别和理解它是在做什么。

海龟几何并不打算成为一个传统几何替代者,而是学习几何和数学时候的另一个入口点。 它同时适合儿童以及成年人。

Seymour Papert在 头脑风暴 里给出海龟几何背后的基本原理透彻的解释。 关于海龟几何学还有许多版本的Logo教程和指南。

虽然很容易开始学习海龟几何,但它可以变得非常复杂。 这本哈尔Abelson和Adrea diSessa 著的书 海龟 几何 包括 许多对小海龟更高级的探索。

 

走起

另一种Logo龟出现在1980年代早期,通常被称为动态海龟、或“小精灵”,因为他们住在像德州仪器TI99/4雅达利800的游戏电脑里. 这些机器的视频游戏硬件允许软件高速的画出更多彩色对象。

这些版本的电脑用Logo创建许多形状海龟,可以是鸟类,树木、狗、或宇宙飞船。 尽管早期的视频游戏电脑消失了,这些”小精灵“功能已经包含在大多数现代版本的Logo之中。

这里有一个如何创建动态海龟动画的例子:

我们先用一个命令分配一个形状给一个海龟, 例如: setshape”bird1 我们也可以设定另外一个不同位置形状的鸟,通过输入: setshape”bird2

 
然后我们可以编写一个"飞"的程序(译注:飞的英语单词 fly)

to fly
setshape”bird1
setshape”bird2
end

指令 fly 让鸟儿扇动翅膀 一次。 repeat 9999 [fly] 使其不断拍打翅膀 但它盘旋在一个地方。 我们也可以修改程序让它前进:

to fly
setshape ”bird1
forward 2
setshape ”bird2
forwad 2
end

在皮姆我们可以用命令永远(forever) forever [fly] 放飞这只小鸟,或者我们可以用fly命令编写程序来实现 ”小鸟海龟“ 本身,然后使用 fly 。 然后用鼠标点击“小鸟海龟”使它在运动到指定的地方。 在Windows版的 PC Logo里指令是 launch [fly] 运行有同等效果。

这些版本Logo的程序运行环境也能让我们在同一时间运行多个进程。 这种“多任务”能力在创建动画时尤为重要。 动画里每个角色可以通过独立编程和激活。 在皮姆这个项目里有三只鸟和一只蜜蜂在同一时间围绕飞行。

这些特性在 Scratch (挠痒痒) 中得到充分发展,在Scratch里"小精灵"们被广泛用于创作动画和游戏。(Scratch 是一款由麻省理工学院 ——MIT 设计开发的少儿编程工具)