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
  • 相关阅读:
    HDU 1495 非常可乐
    ja
    Codeforces Good Bye 2016 E. New Year and Old Subsequence
    The 2019 Asia Nanchang First Round Online Programming Contest
    Educational Codeforces Round 72 (Rated for Div. 2)
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)
    AtCoder Regular Contest 102
    AtCoder Regular Contest 103
    POJ1741 Tree(点分治)
    洛谷P2634 [国家集训队]聪聪可可(点分治)
  • 原文地址:https://www.cnblogs.com/psil-xyz/p/7768416.html
Copyright © 2011-2022 走看看