lisp scheme 果壳_common lisp和scheme的区别

1. 在Common Lisp 眼中,一个符号的symbol-value 和symbol-function 是不一样的,而Scheme

对两者不作区分。在Scheme 里面,变量只有唯一对应的值,它可以是个函数,也可以是另一种对

象。因此,在Scheme 中就不需要#’ 或者funcall 了。Common Lisp 的:

(let ((f #’(lambda (x) (1+ x))))

(funcall f 2))

在Scheme 中将变成:

(let ((f (lambda (x) (1+ x))))

(f 2))

2. 由于Scheme 只有一个名字空间,因而它没有必要为各个名字空间专门设置对应的赋值操作

符(例如defun 和setq)。取而代之,它使用define,define 的作用和defvar 大致相当,同时

用set! 替代了setq。在用set! 为全局变量赋值前,必须先用define 创建这个变量。

3. 在Scheme 中,通常用define 定义有名函数,它行使着defun 和defvar 在Common Lisp 中的功

能。Common Lisp 的:

(defun foo (x) (1+ x))

有两种可能的Scheme 翻译:

(define foo (lambda (x) (1+ x)))

(define (foo x) (1+ x))

4. 在Common Lisp 中,函数的参数按从左到右的顺序求值。而在Scheme 中,有意地不对求值顺序

加以规定。(并且语言的实现者对于忘记这点的人幸灾乐祸。)

5. Scheme 不用t 和nil,相应的,它有#t 和#f。空列表,(),在某些实现里为真,而在另一些实现里

为假。

6. cond 和case 表达式里的默认子句在Scheme 中带有else 关键字,而不是Common Lisp 中的t。

7. 某些内置操作符的名字被改掉了:consp 成了pair?,而null 则是null?,mapcar (几乎) 是map,

等等。通常根据上下文,应该能看出这些操作符的意思。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值