首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何用Python编写一个Lisp解释器

有许多用于词法分析工具(如 Mike Lesk 和 Eric Schmidt lex),但现在我们选择使用一个非常简单工具:Python str.split 函数。...调用 procedure 过程引入了新局部变量,将其与函数参数列表标识符一一绑定,对应所调用函数参数列表值。...另外还有两种方法:构造器 __init__ 构造了新环境,引入参数名列表和对应参数值列表创建了内部包含 {variable: value} 新环境,同时也可关联外部环境。...在程序后两行,我们定义了 account1,调用了 (account1 -20.00);这表示创建一个期初余额为100刀银行账户,被取出了20刀。...Tony 认为最难部分是表达式解释器;需要Lisp,他知道如何编写 C 程序来处理非 Lisp 字符,并将其链接到 Lisp 程序。

1.3K40

Emacs Lisp

LISP 编程语族已经演变出许多种方言,现代最著名通用编程语种是 Common Lisp 和 Scheme , 以上解释来自 WIKI Emacs LispLisp 一个分支 Emacs Lisp...,一种直译式脚本语言,为LISP方言之一,GNU Emacs与XEmacs文字编辑器都使用这个编程语言来扩展它们功能,它直译器是以C语言来实作,它受到Maclisp影响很大,但是跟Common...o意思是: 先按下Ctrl-x 再按下o ;; 如果要执行一系列指令,可以使用流程函数progn,把函数命令连接起来. ;; 下面的命令,先打开一个buffer,再执行hello函数hello...;; Lisp使用括号构造列表使用setq给变量赋值。...;; 如果想要得到列表一个元素,可以使用car函数 (car list-of-names) ;; 如果想要得到列表除第一个元素以外其它元素,可以使用cdr函数 (cdr list-of-names

2.3K40
您找到你想要的搜索结果了吗?
是的
没有找到

Emacs Lisp

LISP 编程语族已经演变出许多种方言,现代最著名通用编程语种是 Common Lisp 和 Scheme , 以上解释来自 WIKI Emacs LispLisp 一个分支 Emacs Lisp...,一种直译式脚本语言,为LISP方言之一,GNU Emacs与XEmacs文字编辑器都使用这个编程语言来扩展它们功能,它直译器是以C语言来实作,它受到Maclisp影响很大,但是跟Common...o意思是: 先按下Ctrl-x 再按下o ;; 如果要执行一系列指令,可以使用流程函数progn,把函数命令连接起来. ;; 下面的命令,先打开一个buffer,再执行hello函数hello...;; Lisp使用括号构造列表使用setq给变量赋值。...;; 如果想要得到列表一个元素,可以使用car函数 (car list-of-names) ;; 如果想要得到列表除第一个元素以外其它元素,可以使用cdr函数 (cdr list-of-names

2.2K30

Lisp语言简介_c++是什么语言

这个比较小众编程到底是什么~ ————————————————————————— LISP(全名LISt Processor,即列表处理语言),由约翰·麦卡锡在1960年左右创造一种基于λ演算函数式编程语言...LISP有很多种方言,各个实现中语言不完全一样。1980年代Guy L. Steele编写Common Lisp试图进行标准化,这个标准被大多数解释器和编译器所接受。...在Unix/Linux系统中,还有一种和Emacs一起Emacs Lisp(而Emacs正是用Lisp作为扩展语言进行功能扩展)非常流行,建立了自己标准。...LISP语言主要现代版本包括Common Lisp和Scheme。 基本介绍 LISP 是第一個函數型程式語言,区别于C/Java等命令型编程语言。...反之一个被引用表仅仅被视为表 > (atom ‘(atom ‘a))() 引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 Lisp 最为与众不同特点——代码和数据使用相同结构来表示

2.2K20

惊呆了,老外竟然用50中编程语言写“Hello,Word!”,我服了...

它是一种可编译通用命令式编程语言,特别适用于数值和科学计算。Fortran 语言创建于 1957 年,以下使用语言第一个版本编写“Hello, World!”...Lisp - 1958 年 Lisp 是最古老编程语言家族,它既是命令式语言,又是函数式语言。Lisp 最初创建于 1958 年,当时是作为展示程序实用模型发布。...在 20 世纪 70 年代和 80 年代,Lisp 家族成为人工智能领域非常受欢迎语言。 以下是用 Lisp 编写“Hello, World!”...C++ 语言正式命名为 C++ 是在 1983 年。 这门编程语言现在被 ISO 标准化了,在工业界以及其他领域被广泛使用。...Common Lisp - 1984 年 Common Lisp 通常简写为 CL,是由 ANSI 标准化了 Lisp 语言规范。 (princ "Hello, World!") 19.

75320

Clojure与LispClojure与Lisp

(艾伦·凯) "任何C或Fortran程序复杂到一定程度之后,都会包含一个临时开发、只有一半功能、不完全符合规格、到处都是bug、运行速度很慢Common Lisp实现。"...复制变量就相当于复制指针,而不是复制它们指向数据。 5 垃圾回收机制 6 程序由表达式(expression)组成 Lisp程序是一些表达式区块集合,每个表达式都返回一个值。...在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp基本数据结构。 用一门语言自己数据结构来表达语言,这被证明是非常强大功能。...如果你创造了一种新语言,其中有car、cdr、cons、quote、cond、atom、eq这样功能,还有一种把函数写成列表表示方法,那么在它们基础上,你完全可以推导出Lisp语言所有其他部分。...如今,在任何具备 Java 虚拟机地方,都可以使用 Lisp 强大功能。 Clojure 是一种函数式编程语言 它囊括了函数式编程所有精华: 避免了不稳定状态、递归、更高阶函数等。

1.9K30

NUS CS1101S:SICP JavaScript 描述:前言、序言和致谢

对于最后一个问题令人惊讶答案是“是的”;构造一个接受(1)作为某个其他函数描述数据结构和(2)参数列表函数,当应用于给定参数时,其行为与其他函数完全相同,只是稍微有些棘手。...最近 APL 版本确实支持匿名函数值和嵌套数组,这使得 APL 表达能力大大增强。(APL 原始设计确实有两个非常好地方:一个是适用于数据结构全面函数集,另一个是非常合适函数名称集。...在这本书中,“程序”使用集中在使用 Lisp 方言编写、在数字计算机上执行程序创建、执行和研究上。使用 Lisp,我们限制或限定不是我们可以编程内容,而只是我们程序描述符号。...Lisp 程序用功能膨胀库,其效用超越了产生它们应用程序。列表Lisp 本地数据结构,在很大程度上负责这种效用增长。列表简单结构和自然适用性反映在那些令人惊讶地非特异函数中。...然而,转换到 JavaScript 迫使我们对第 4 和 5 章解释器和编译器进行微妙更改,以处理返回语句。Scheme 表达式导向语法没有返回语句,而返回语句是面向语句语言一个显著特征。

11810

Lisp本质(The Nature of Lisp)学习思考

一个简单XML指令会导致具有相同名字Java类装入,执行其代码。 <copy todir=".....你可以用<em>一个</em>内置<em>的</em>专门用于<em>创建</em><em>函数</em><em>的</em><em>函数</em>来<em>创建</em><em>函数</em>,然后把它赋值给符号fn, 用伪码来表示就是: fn [a] { return *(a, 2); } 这段代码<em>返回</em><em>一个</em>具有<em>一个</em>参数<em>的</em><em>函数</em>, <em>函数</em><em>的</em>功能是计算参数乘...*, 3, 4 我们可以用<em>一个</em>内置<em>的</em><em>函数</em>head来<em>返回</em>表<em>的</em>第<em>一个</em>元素, tail<em>函数</em>来<em>返回</em>剩余元素组成<em>的</em>表。...那<em>该</em>怎么做呢? 真的简单。回想一下, <em>Lisp</em><em>的</em><em>函数</em>调用格式: (function-name arg1 arg2 arg3) 其中每个参数都是s表达式, 求值以后, 传递给<em>函数</em>。...我们已经说过了DSL<em>的</em>好处, 这也就是Ant用XML而不直接用Java<em>的</em>原因。如果<em>使用</em><em>Lisp</em>,我们可以任意<em>创建</em>DSL, 只要我们需要。

1.7K60

为什么Lisp语言如此先进?(译文)

在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp基本数据结构。 用一门语言自己数据结构来表达语言,这被证明是非常强大功能。...我们需要写一个函数,它能够生成累加器,即这个函数接受一个参数n,然后返回一个函数,后者接受参数i,然后返回n增加(increment)了i后值。...而且尽管Python确实支持函数数据类型,但是没有一种字面量表示方式(literal representation)可以生成函数(除非函数体只有一个表达式),所以你需要创造一个命名函数,把它返回。...你实际上就是在做同样事,只不过划出了一个独立区域,保存累加器函数,区别只是保存在对象一个属性中,而不是保存在列表(list)头(head)中。...、到处都是bug、运行速度很慢Common Lisp实现。"

1.2K60

PHP 是最糟糕编程语言?

定义语言规范吸取了所有不同 LISP 精华,而现代开发环境对于 LISP 开发者来说是最好LISP 是正确方式 LISP 代表了软件开发“正确方式”。...LISP 本身并非一种单一语言,而是一个语言家族。尽管 Common LISP 被设计成一种标准,但是 LISP 本身实现方式是根据需要完成各种工作而存在。...要想用别的东西代替 PHP 引擎,就必须实现现有引擎所有特性。 许多核心函数 LAX 函数参数和返回类型都使得系统工作更容易。...像 strpos() 这样函数返回值可以是整型数或布尔值,相对于严格设计成返回整型数或抛出异常方法,处理要稍微容易一些。...正如我在 strpos() 中提到,PHP 对于遇到错误函数往往会相当一致地返回 FALSE。这未必是正确,但它却是一致。带下划线和不带下划线函数名通常都会匹配其基础库。

1.7K20

Emacs Lisp2

: 先按下Ctrl-x 再按下o;; 如果要执行一系列指令,可以使用流程函数progn,把函数命令连接起来.;; 下面的命令,先打开一个buffer,再执行hello函数hello函数参数是...中使用括号构造列表使用setq给变量赋值。...;; 如果想要得到列表一个元素,可以使用car函数(car list-of-names);; 如果想要得到列表除第一个元素以外其它元素,可以使用cdr函数(cdr list-of-names...);; 以后push函数可以在列表头部插入新元素,所以下面的命令将改变list-of-name中元素个数(push "Stephanie" list-of-names);; mapcar函数列表列表一个元素分别取出来...;; 定义一个replace-hello-by-bonjour函数,顾名思义,就是把hello替换成bonjour;; 该函数首先把光标移到一个叫做testbuffer中;; 再把光标移到buffer

95940

编程语言发展70年,用50种不同语言输出「Hello World」

通常程序员会使用多种编程语言,多甚至实现了十几种 还有一种称为TTHW(Time to “Hello, World!”)方法,来衡量程序员创建一个“Hello, World!”程序时间。...Scheme - 1975 Scheme创建于1975年,是一种支持函数式和命令式编程多范式编程语言。这是基于Lisp三大语言之一,另两种是Common Lisp和最近创建Clojure。...Common Lisp - 1984 Common Lisp,通常缩写为CL,是由ANSI标准化Lisp语言规范。 (princ "Hello, World!") 19....1990年,John Ousterhout为Tcl开发了一个名为Tk扩展,这是一个用于创建可移植图形界面的库。因此,今天提到Tcl时,更多是指Tcl/Tk组合。...语言派生于c++和Java,使用它们一般语法和一些概念。c#也可以用于开发ASP上web应用程序。

61720

50 种不同编程语言“Hello World”,你知道多少?

你可以用多少种不同语言编写一个“Hello, World!”程序,你答案是什么? 让我们在计算机编程世界里回顾一翻。我会向你展示50种不同编程语言编写“Hello, World!”程序。...Scheme - 1975 Scheme创建于1975年,是一种支持函数式和命令式编程多范式编程语言。这是基于Lisp三大语言之一,另两种是Common Lisp和最近创建Clojure。...Common Lisp - 1984 Common Lisp,通常缩写为CL,是由ANSI标准化Lisp语言规范。 (princ "Hello, World!") 19....1990年,John Ousterhout为Tcl开发了一个名为Tk扩展,这是一个用于创建可移植图形界面的库。因此,今天提到Tcl时,更多是指Tcl/Tk组合。...语言派生于c++和Java,使用它们一般语法和一些概念。c#也可以用于开发ASP上web应用程序。

1.1K10

50种不同编程语言“Hello, World”,你会写几种?

方法,来衡量程序员创建一个“Hello, World!”程序时间。 你可以用多少种不同语言编写一个“Hello, World!”程序,你答案是什么? 让我们在计算机编程世界里回顾一翻。...这是基于Lisp三大语言之一,另两种是Common Lisp和最近创建Clojure。 (display "Hello, World!")...; end Hello; 18 Common Lisp - 1984 Common Lisp,通常缩写为CL,是由ANSI标准化Lisp语言规范。 (princ "Hello, World!")...1990年,John Ousterhout为Tcl开发了一个名为Tk扩展,这是一个用于创建可移植图形界面的库。因此,今天提到Tcl时,更多是指Tcl/Tk组合。...语言派生于c++和Java,使用它们一般语法和一些概念。c#也可以用于开发ASP上web应用程序。

1.1K20

近 50 种花式 “Hello, World”

方法,来衡量程序员创建一个“Hello, World!”程序时间。 你可以用多少种不同语言编写一个“Hello, World!”程序,你答案是什么? 让我们在计算机编程世界里回顾一翻。...这是基于Lisp三大语言之一,另两种是Common Lisp和最近创建Clojure。 (display "Hello, World!")...; end Hello; 18 Common Lisp - 1984 Common Lisp,通常缩写为CL,是由ANSI标准化Lisp语言规范。 (princ "Hello, World!")...1990年,John Ousterhout为Tcl开发了一个名为Tk扩展,这是一个用于创建可移植图形界面的库。因此,今天提到Tcl时,更多是指Tcl/Tk组合。...语言派生于c++和Java,使用它们一般语法和一些概念。c#也可以用于开发ASP上web应用程序。

48020

编程语言50年来变化,我用50种编程语言告诉你“Hello world”怎么写!

“程序员在职业生涯中通常使用一种以上编程语言,他们中大多数甚至至少已经实现了十几种。 甚至有一个名为TTHW指标来衡量一个程序员接触一门新编程语言时,成功写出“Hello, World!...“运行所需要时间。 然而,如果今天我问你,你可以写多少种不同编程语言,你写一个"Hello word” 为了帮助你,刷新你记忆力,我建议在计算机编程世界中走一段短暂穿越时间旅程。...Lisp - 1958 Lisp是最古老编程语言系列,它既是交互式又是函数。...Scheme - 1975 Scheme创建于1975年,是一种多范式编程语言,支持函数式和交互式编程。它是Lisp三种重要变种之一,由Common Lisp和Clojure共同开发。...Common Lisp - 1984 Common Lisp,通常缩写为CL,是ANSI标准化Lisp语言规范。 (princ "Hello, World!") 19.

75310
领券