zoukankan      html  css  js  c++  java
  • 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,
    等等。通常根据上下文,应该能看出这些操作符的意思。

    QinHongYu blog
  • 相关阅读:

    c#常用的基础概念
    Visual Studio2010+SOS.dll调试入门 摘自 http://www.cnblogs.com/luminji/archive/2011/01/27/1946217.html
    优化数据库之前的10个问题
    js数组清空的两种方式
    我的资源(网站, 工具)
    iis使用十大原则
    SQL2005分页存储过程
    温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
    无法获得数据库 'model' 上的排他锁 网上搜索结果 IT
  • 原文地址:https://www.cnblogs.com/psil-xyz/p/7768416.html
Copyright © 2011-2022 走看看