[PLT] 柯里化的前生今世(二):括号神教

The limits of your languages are the limits of your world.
只会一种语言,会限制你的视野,很难有机会去接触那些有趣的想法。
语言是表达思想的工具,而有想法的人未必用我们熟知的语言去表达。
所以,我们就不得不多学一些。

关于

本文是系列文章中的一篇,
上一篇中,我们提到了著名的逻辑学家Haskell Curry,
提到了类型和函数,以及看待多元函数的不同方式。
最后,引出了curry和uncurry两个高阶函数。

为了理解高阶函数,以及相关的,求值环境,词法作用域,闭包等概念。
我们从今天起要学习一门新的语言了,用它来描述这些概念比较方便。
过几天,当我们遇到参数化类型,代数数据类型的时候,
我们会再学一门语言。

括号神教

今天我们要学习的语言是Racket,它是Lisp家族中的一个语言。
Lisp,最初被拼为LISP,一个历史悠久的编程语言家族。最早由约翰·麦卡锡在1958年基于λ演算创造,演化至今,是历史第二悠久的高级语言,仅次于Fortran,也是第一个函数式编程语言。


约翰·麦卡锡

约翰·麦卡锡(John McCarthy,1927-2011),生于美国马萨诸塞州波士顿,计算机科学家。他因在人工智能领域的贡献而在1971年获得图灵奖。
他于1948年获得加州理工学院数学学士学位,1951年获得普林斯顿大学数学博士学位。分别短暂地为普林斯顿大学、斯坦福大学、达特茅斯学院和麻省理工学院供职后,麦卡锡于1962年-2000年底在斯坦福担任教授,退休后成为名誉教授。

最美丽的传说

在ILC 2002大会上前Lisp大神,当今的Python倡导者Peter Norvig,由于某些原因,做一个类似于马丁路德在梵蒂冈宣扬新教的主题演讲,因为他在演讲中大胆地声称Python就是一种Lisp。
讲完后进入提问环节,出乎我意料的是,Peter点了我过道另一侧,靠上面几排座位的一个老头,他衣着皱褶,在演讲刚开始的时候踱步进来,然后就靠在了那个座位上面。
这老头满头凌乱的白发,邋遢的白胡须,像是从旅行团中落下的游客,已经完全迷路了,闲逛到这里来歇歇脚,随便看看我们都在这里干什么。我的第一个念头是,他会因为我们的奇怪的话题感到相当失望;接着,我意识到这位老头的年纪,想到斯坦福就在附近,而且我想那人也在斯坦福 —— 难道他是……



“嗨,John,有什么问题?” Peter说。
虽然这只是10个字左右的问题,我不会假装自己记住了Lisp之父约翰·麦卡锡说的每一个字。他在问Python程序能不能像处理数据一样,优雅地处理Python代码。
“不行。John, Python做不到。”
Peter就回答了这一句,然后静静地等待,准备接受教授的质疑,但老人没有再说什么了。
此时,无语已胜千言。

Realm of Racket

Lisp家族

跟其他语言不同的是,Lisp语言是一个家族,它的成员被称之为“方言”。
大部分方言都鲜有人知,例如Arc语言,由《黑客与画家》的作者Paul Graham发明。
市面上流行的方言,包括以下几个,

  1. Elisp,是Emacs编辑器支持的脚本语言,可以用elisp扩展Emacs的功能。由于lisp方言强大的表达能力,以及Emacs优雅的架构,让Emacs获得了“神之编辑器”的称号。
  2. Clojure,运行在JVM上的另一种语言,Java是另一种。Clojure对并行和并发的支持,有自己的方式,在并发方面上,它没有提供线程和锁,而是提供了其他4种方式,Vars, Refs, Agents and Atoms
  3. Common Lisp,是商业级的Lisp方言,规范长达1000多页。有LispWorksAllegro CL这些强大的IDE。Common Lisp不支持hygienic macro,在编写宏的时候,容易出现意外的捕获。不过,这也增加了灵活性和表现力。除此之外,Common Lisp还支持Reader macro,和Racket的#reader有异曲同工之妙。
  4. Scheme,是一门力求简洁的Lisp方言,它首次提出了闭包的概念,提出了first-class continuation,提出了hygienic macro,然而它最新的R7RS规范包括最后的附录才只有88页。

DrRacket


Racket,原名PLT Scheme,在Scheme基础上增加了对象、类型、惰性求值等。
它提供了一个IDE,成为Doctor Racket,简称DrRacket,自带丰富的第三方库,如web服务器、数据库、GUI、图像处理等。

我们可以通过Racket的官网,找到DrRacket的下载地址,可以找到多个平台相应的安装包,windows和linux,osx都支持。

安装后,我们打开DrRacket,玩一下。
犹记得去年情人节,DrRacket还卖萌了一把,把图标变成了心形。


打开后,IDE的界面如下,由上下两部分构成,
上面那块称为定义区(definitions panel),下面称为交互区(interactions panel)。


以上,就是标准的Hello world实现了,当然它不仅仅是个玩具哦。


参考:

LISP
约翰·麦卡锡
至今听到关于Lisp最迷人的故事
Realm of Racket
The Racket Reference

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容