跳转到内容

LispKit Lisp

维基百科,自由的百科全书

这是本页的一个历史版本,由Mhss留言 | 贡献2021年2月18日 (四) 10:20 进一步阅读编辑。这可能和当前版本存在着巨大的差异。

Lispkit Lisp是为测试函数式编程概念而开发的Lisp语言的严格函数式子集(“纯Lisp”)。它首先使用了对惰性求值的早期经验。开发者Peter Henderson于1980年出版了用一种变体ALGOL语言写的基于SECD抽象机的实现[1]。编译器和虚拟机都是高度可移植的,并已经在多种机器上实现。

基本函数

基本语言只提供了下列函数,扩展在Henderson书中关于对惰性求值和非确定性编程的明确支持中讨论。

  • atom -- 接受一个表达式,如果它的值是原子则返回 True;否则返回 False。
  • add -- 接受两个表达式,返回它们的数值的和。
  • car -- 接受其值为点对的一个表达式,返回这个点对的第一个值。
  • cdr -- 接受其值为点对的一个表达式,返回这个点对的第二个值。
  • cons -- 接受两个表达式,返回由它们的值构成的一个点对值。
  • div -- 接受两个表达式,返回它们的数值的商。
  • eq -- 接受两个表达式,如果它们的值相等则返回 True;否则返回 False。
  • if -- 接受三个表达式,如果第一个为 True 则返回第二个的值,否则返回第三个的值。
  • lambda -- 接受一个表达式,返回这个表达式为可求值的值。
  • let -- 接受命名表达式的一个列表,返回这个列表为一个单一可求值的值。
  • letrec -- 接受命名表达式的一个列表,返回这个列表为一个单一可求值的值。
  • leq -- 接受两个表达式,如果第一个数值小于或等于第二个则返回 True;否则返回 False。
  • rem -- 接受两个表达式,返回它们的数值的余数。
  • mu -- 接受两个表达式,返回它们的数值的积。
  • quote -- 接受两个表达式,返回这个表达式为一个值。
  • sub -- 接受两个表达式,返回它们的数值的差。

函数lambda、let和letrec是类似的,但是在处理命名变量的方式上有着微妙的区别,故有不同的用处。lambda定义并返回一个函数,let把表达式赋值给变量名,而letrec本质上类似于let,除了它允许递归函数的定义之外。

引用

  1. ^ Henderson, Peter. Functional Programming: Application and Implementation. Prentice Hall. 1980. ISBN 0-13-331579-7. 

进一步阅读

  • Peter Henderson, Geraint A. Jones, and Simon B. Jones, "The LispKit Manual" (ISBN 0-902928-18-X)

外部链接