- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7行代码,3分钟:从无到有实现一门编程语言
7行代码,3分钟:从无到有实现一门编程语言
实现一门编程语言对任何程序员来说都是值得拥有 经验,因为它能加深你对计算原理
理解,并且还很有趣。
在这篇文章中,我已经让整个过程回归到它 本质:为一种函数式 (图灵等价)编程语言设
计7行代码 解释器。大概只需要3分钟就能实现
这个7行代码 解释器展示了在众多解释器中同时存在 一个可升级 体系结构–eval/apply设
计模式。 《Structure and Interpretation of Computer Programs》这本书提到过该模式。
在这篇文章中总计有三门语言 实现:
一个是scheme语言 7行,3分钟实现 解释器一个是Racket语言 重实现最后一个
是1 行、“1-afternoon”解释器,它实现了高级绑定形式、显示递归、额外作用、高阶函数式等等
对于掌握一门更丰富 语言来说,最后一个解释器是一个好起点
一个小型(图灵机等价)语言
最容易实现 一门编程语言是一个叫做λ运算 极简单、高阶函数式编程语言
λ运算实际上存在于所有主要 功能性语言 内核中:Haskell, Scheme、 ML,但是它也存
在于JavaScript、Python、Ruby 中。它甚至隐藏在Java 中,如果你知道到哪里去找它。
历史简介
1929年Alonzo Church开发出λ演算
在那时,lambda calculus不被叫做编程语言因为没有计算机,所以没有编程 概念。
它仅仅是一个推演函数 数学标记。
幸运 是,Alonzo Church有一个叫作艾伦·图灵 哲学博士。
艾伦·图灵定义了图灵机,图灵机成了第一个被接受 通用计算机定义
不久后发现lambda calculus和图灵机是等价 :任何用λ演算描述 功能可以在图灵机上
实现;并且在图灵机上实现 任何功能可以用λ演算描述
值得注意 是在lambda calculus 中仅有三种表达式:变量引用,匿名函数、函数调用
匿名函数:
匿名函数以”λ-.”标记开始,所以 (λ v . e)函数用来接收一个参数v并返回值e 。
函数调用:
函数调用用两个临近 表达式表示:(f e)
Examples
æ ´å¤ ç²¾å½©æ »ç ¥è®¿é ® 1
我们可以将这个恒等函数应用到一个恒等函数上:
((λ x . x) (λ a . a)) (仅返回这个恒等函数本身)
这儿有一个更有趣 程序:
你能弄清楚它是干嘛 ?
等一下!见鬼,这怎么算一门编程语言?
乍一看,这门简单语言好像缺乏递归和迭代,更不用说数字、布尔值、条件语句、数据结构
和剩余其他 。这样 语言怎么可能成为通用 呢?
λ演算实现图灵机-等价 方式是通过两种最酷 方式:
邱奇编码 (Church encoding )和Y combinator (美国著名企业孵化器)
我已经写了两篇关于Y combinator和邱奇编码 文章。
但是,你如果不想读它们 话,我可以明确 告诉你比起你期望 仅一个((λ f . (f f)) (λ f . (f f)))
程序来说 有更多 lambda calculus知识。
表面上开始 程序叫做Ω,如果你尝试运行它 话,它不会终止 (想一下你是否明白其中
原因)
实现λ演算
下面是基于Scheme语言标准(R5RS) 7行、3分钟λ演算解释器。在术语中,它是一个依赖
环境 指示解释器
代码将从文件中读入程序、分析、求值最后打印值(这是一段没有注释和空白行 7行代码)
Schema语言的read函数使得词法分析和语法分析简单化。只要你想处于语法“平衡圆
括号” (符号式)世界 。
(如果不想的话,你必须钻研语法分析,你可以从我写的一篇语法分析文章开始)在Scheme
语言中,read函数从文件获取加括号的输入并把它分析然后生成树函数eval 和 apply构成了解释
器 内核。即使我们使用 是Scheme语言,我们仍给出了函数概念上 “签名”
eval函数将一个表达式和环境变量赋给一个值。表达式可以是一个变量、λ术语或者是一个
应用。
一个环境值是从变量到值 映射,用来
您可能关注的文档
- 10MW模块式高温气冷试验堆的初步动态分析.pdf
- 13wx1yy000007初三英语王叶(2013年3月9日7B 时态和语态.宾语从句和感叹句) 娄老师.doc
- 5 能带理论Ⅰ华理材料固物.pdf
- 2017最新初中专项中考热点训练--成语专项练习.doc
- 6.4 2011-2012学年北京市西城区(南区)七年级(上)期末数学试卷.doc
- 6.备课资料(函数概念及性质).doc
- 600MW机组气动旁路系统的安全性分析.pdf
- 6.8各种积分的联系式及其在场论中的应用.ppt
- 6.第二章 平面的投影.ppt
- 2排序思想及其应用.ppt
- 2025-2030中国豆科海斯行业市场发展趋势与前景展望战略分析研究报告.docx
- 2025-2030中国豆类产品行业市场发展现状及发展趋势与投资研究报告.docx
- 2025-2030中国豆浆粉行业产销规模与营销渠道推广策略研究报告.docx
- 消防设计与施工配合技术咨询服务协议.docx
- 2025-2030中国豆类产品行业市场深度调研及竞争格局与投资研究报告.docx
- 2025-2030中国豆瓣酱市场调研及重点企业投资评估规划分析研究报告.docx
- 2025-2030中国豆类成分行业市场发展趋势与前景展望战略研究报告.docx
- 2025-2030中国豆类成分行业市场发展趋势与前景展望战略分析研究报告.docx
- 2025-2030中国豆奶行业市场深度分析及发展预测与投资策略研究报告.docx
- 2025-2030中国豆粕粉行业市场现状分析及竞争格局与投资发展研究报告.docx
文档评论(0)