Logo编程语言
摘要
Logo编程语言是一种专为学习设计的Lisp方言,强调交互性、模块化和灵活性,以支持教育编程体验。
暂无内容
查看缓存全文
缓存时间: 2026/09/11 14:23
# Logo编程语言
来源:https://el.media.mit.edu/logo-foundation/what_is_logo/logo_programming.html
Logo编程语言作为Lisp的一种方言,其设计初衷是作为学习工具。其交互性、模块化、可扩展性及灵活的数据类型等特点,均源于这一核心目标。
### 交互性
虽然存在编译型Logo版本,但它通常以解释型语言实现。这种方式的交互性使用户能对单条指令获得即时反馈,从而辅助调试与学习过程。错误信息具有描述性。例如:
fowad
**我不认识fowad这个词**
(**fowad**既不是Logo内置原语,也不是用户定义的过程。)
forward
**forward参数不足**
(拼写正确后,Logo能识别**forward**,但无法执行指令,因为**forward**需要更多参数信息。)
forward 100
(Logo正常执行,未报错。海龟向前移动100步。)
### 模块化与可扩展性
Logo程序通常由多个小型过程组成。过程一般在文本编辑器中定义:以特殊词**to**开头,后接过程名;后续行构成过程定义;最后以**end**标记结束。
在我们之前关于海龟图形(https://el.media.mit.edu/logo-foundation/what_is_logo/logo_primer.html)的示例中,我们定义了绘制正方形的过程:
to square repeat 4 [forward 50 right 90] end
并将其作为另一个过程的子过程使用:
to flower repeat 36 [right 10 square] end
同理,**flower**也可作为更大程序的构建模块:
to garden repeat 25 [set-random-position flower] end
需要说明的是,**set-random-position**不是原语,但**random**是,**setposition**(或**setpos**/**setxy**)也是。当然你也可以用**forward**、**right**和**random**来实现**set-random-position**。
Logo过程一旦定义,其使用方式与内置原语完全一致。实际上,仅凭观察Logo程序,无法区分原语与用户自定义过程——除非了解具体实现版本。在我们关于自然语言(https://el.media.mit.edu/logo-foundation/what_is_logo/logo_and_natural_language.html)的示例中,我们使用**pick**过程从列表中随机选取项目,例如在who过程中:
to who output pick [Sandy Dale Dana Chris] end
在某些Logo版本中**pick**是原语,其他版本则需自行编写。但无论哪种情况,**who**的外观与功能都完全相同。
Logo允许通过小步骤构建复杂项目。编程过程实质是扩展其词汇库——用已知词汇教它新词。这与人类学习口语的方式类似。
### 灵活性
Logo以单词和列表进行操作。Logo单词是字符序列,Logo列表是单词/列表的有序集合。数字属于特殊单词,因为可进行算术运算。
许多编程语言对数据类型要求严格。这虽然方便计算机处理,却增加了程序员负担。进行加法运算前可能需明确数据是整数还是实数。计算机需要此类信息,但人类通常无需考虑。Logo会自动处理这些细节:
print 3 + 4
**7**
print 3 / 4
**0.75**
若熟悉其他编程语言,以下操作可能令您惊讶:
print word "apple "sauce
**applesauce**
print word "3 "4
**34**
print 12 + word "3 "4
**46**
以下是计算阶乘的递归过程:
to factorial :number
if :number = 1 [output 1]
output :number * factorial :number - 1
end
print factorial 3
**6**
print factorial 5
**120**
以下是反转单词列表的过程:
to reverse :stuff
ifelse equal? count :stuff 1
[output first :stuff]
[output sentence reverse butfirst :stuff first :stuff]
end
print reverse [apples and pears]
**pears and apples**
您也可查看Brian Harvey的有趣Logo示例(http://http.cs.berkeley.edu/%7Ebh/logo-sample.html)。
### 增强特性
上述功能是所有Logo版本的共同特征。某些实现包含增强语言特性:
Mac平台曾推出面向对象的Object Logo。
MicroWorlds Logo支持多任务处理,可同时运行多个独立进程。LEGO Logo产品Control Lab软件也具备该功能。更先进的大规模并行版本是StarLogo。
传统Logo中,向海龟发送命令:
repeat 9999 [forward 1 right 1]
需要较长时间执行。而指令:
repeat 9999 [forward 1 right 1] print "HELLO
会在海龟移动完成后显示**HELLO**单词。
在MicroWorlds Logo中输入:
launch [repeat 9999 [forward 1 right 1]] print "HELLO
海龟会开始运动,并在启动第一个进程时立即显示**HELLO**。或:
forever [forward 1 right 1] print "HELLO
将启动持续运行直至手动停止的进程,同样会在启动海龟进程时立即显示**HELLO**。
### 延伸阅读
如需深入了解Logo编程语言,可参阅Brian Harvey的三部曲《Computer Science Logo Style》(https://el.media.mit.edu/logo-foundation/resources/books.html#CSLS)与Michael Friendly的《Advanced Logo》(https://el.media.mit.edu/logo-foundation/resources/books.html#advanced)。
若尚未安装Logo并希望入门,可查看我们的Logo软件页面(https://el.media.mit.edu/logo-foundation/resources/software_hardware.html),或直接下载以下软件:
UCBLogo(http://www.eecs.berkeley.edu/%7Ebh/)、
MSWLogo(http://www.softronix.com/logo.html)、
FMSLogo(http://fmslogo.sourceforge.net/)、
StarLogo TNG(https://education.mit.edu/project/starlogo-tng/)或
StarLogo Nova(https://www.slnova.org/)。
本文提供印地语译本(http://dealsqueen.co.uk/translations/logoprogramming/)
本文提供乌克兰语译本(https://fixgerald.com/blog/mova-programuvannia-logo)
本文提供塞尔维亚-克罗地亚语译本(https://studycrumb.com/translations/logo-programski-ezik)
相似文章
本地VibeCoding非常有趣..
一位程序员分享了使用本地LLM进行编码(VibeCoding)的个人实用规则清单,强调实验、任务分解、安全测试以及理解模型能力。技术栈包括llama.cpp和Qwen模型。
λλ:一种用于硅光子的编程语言
λλ是一种专为硅光子设计的新型编程语言,为光子系统的开发提供高级工具。
说科学的语言:迈向面向自然科学的通用生成基础模型
LOGOS是一个科学生成语言模型,它将多种科学对象及其空间交互编码为令牌序列,从而在自然科学的各类任务中实现统一的自主回归框架。1B、3B和8B参数的模型展现出性能随规模一致提升,并已发布以促进研究。
Forth 与 Lisp 的迁移之道
本章节选自《Let Over Lambda》,探讨如何使用宏在 Lisp 中实现 Forth 编程语言,强调语法的二元性和元编程技术。旨在向 Lisp 读者教授 Forth 概念,并讨论 Forth 设计背后的哲学。
Λ Snap – 一种为儿童和成人设计的友好编程语言,用于计算机科学学习
Snap! 是一种广泛友好的编程语言,专为儿童和成人设计,作为严肃计算机科学学习的平台。