lisp把选集转成表_LISP(表处理语言)

Lisp的表达式是一个原子(atom)或表(list),原子(atom)是一个字母序列,如abc;表是由零个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如:

abc

()

(abcxyz)

(ab(c)d)

最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。

正如算术表达式1+1有值2一样,Lisp中的表达式也有值,如果表达式e得出值v,我们说e返回v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元素叫做自变量。

Lisp的7个公理(基本操作符):

公理一:

(quotex)返回x,我们简记为'x

公理二:

(atomx)当x是一个原子或者空表时返回原子t,否则返回空表()。在Lisp中我们习惯用原子t表示真,而用空表()表示假。

>(atom'a)

t

>(atom'(abc))

()

>(atom'())

t

现在我们有了第一个需要求出自变量值的操作符,让我们来看看quote操作符的作用——通过引用(quote)一个表,我们避免它被求值。一个未被引用的表达式作为自变量,atom将其视为代码,例如:

>(atom(atom'a))

t

反之一个被引用的表仅仅被视为表

>(atom'(atom'a))

()

引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了Lisp最为与众不同的特点——代码和数据使用相同的结构来表示,而我们用quote来区分它们。

公理三:

(eqxy)当x和y的值相同或者同为空表时返回t,否则返回空表()

>(eq'a'a)

t

>(eq'a'b)

()

>(eq'()'())

t

公理四:

(carx)要求x是一个表,它返回x中的第一个元素,例如:

>(car'(ab))

a

公理五:

(cdrx)同样要求x是一个表,它返回x中除第一个元素之外的所有元素组成的表,例如:

>(cdr'(abc))

(bc)

公理六:

(consxy)要求y是一个表,它返回一个表,这个表的第一个元素是x,其后是y中的所有元素,例如:

>(cons'a'(bc))

(abc)

>(cons'a(cons'b(cons'c())))

(abc)

公理七:

条件分支,在Lisp中,它是由cond操作符完成的,cond是七个公理中最后一个也是形式最复杂的一个(欧几里德的最后一个公理也如是):

(cond()()...())

p1到pn为条件,e1到en为结果,cond操作符依次对p1到pn求值,直到找到第一个值为原子t(还记得吗?)的p,此时把对应的e作为整个表达式的值返回,例如:

>(cond((eq'a'b)'first)

((atom'a)'second))

second

好了,至此我们已经有了Lisp世界的所有基本公理,我们可以开始构建整个世界的规则了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值