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,
等等。通常根据上下文,应该能看出这些操作符的意思。
common lisp和scheme的区别的更多相关文章
- scheme和common lisp 区别
Scheme and Common Lisp use different names for some of the basic system functions. Many Lisp program ...
- 在windows上安装common lisp开发环境
(2014.1写于CSDN的文章) 最近对lisp非常感兴趣,因此在google中搜索了“common lisp install windows”, 想装一个开发环境玩玩. 第一条结果就是 “Gett ...
- ANSI Common Lisp Practice - My Answers - Chatper - 3
Ok, Go ahead. 1 (a) (b) (c) (d) 2 注:union 在 Common Lisp 中的作用就是求两个集合的并集.但是这有一个前提,即给的两个列表已经满足集合的属性了.具体 ...
- 搭建fedora开发环境 common lisp, c++, go
第三方软件库: http://download1.rpmfusion.org/free/fedora/releases/25/Everything/x86_64/os/repoview/index.h ...
- Difference between LET and LET* in Common LISP
Difference between LET and LET* in Common LISP LET Parallel binding which means the bindings com ...
- Common Lisp编译程序的小技巧
这几天开始玩Common Lisp,遇上了一个有意思的问题,CL一般是解释运行,也有实现可以编译生成字节码(fas文件).我正在用的两种CL实现是SBCL和CLISP,前者是我从<实用Commo ...
- slime+sbcl for common lisp
sudo apt-get install slime audo apt-get install sbcl ;;sbcl+slime for common lisp ;;sudo apt-get ins ...
- Common Lisp 编译器IDE环境搭建
搭建Common Lisp编程环境的方法有很多种,这里我使用的是最常见的一种:SBCL + Emacs + SLIME. SBCL是Steel Bank Common Lisp的简称,它是Common ...
- 推动Common Lisp的实际应用
推动Common Lisp的实际应用 推动Common Lisp的实际应用
随机推荐
- Python学习笔记010_迭代器_生成器
迭代器 迭代就类似于循环,每次重复的过程被称为迭代的过程,每次迭代的结果将被用来作为下一次迭代的初始值,提供迭代方法的容器被称为迭代器. 常见的迭代器有 (列表.元祖.字典.字符串.文件 等),通常 ...
- 来自projecteuler.net网站的练习题2
0.题目如下: Each new term in the Fibonacci sequence is generated by adding the previous two terms. By st ...
- Angular2 Service实践
引言: 如果说组件系统(Component)是ng2应用的躯体,那把服务(Service)认为是流通于组件之间并为其带来生机的血液再合适不过了.组件间通信的其中一种优等选择就是使用服务,在ng1里就有 ...
- nmap扫描某段网络连通性
nmap -v -sP 10.0.10.0/24 进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测): nmap -sP 192.168.1.0/24 仅列出指 ...
- TCP/IP(二)物理层详解
前言 在前面说了一下,计算机网络的大概内容,没有去深刻的去了解它,这篇文章给大家分享一下物理层! 我们知道ISO模型是七层,TCP/IP模型是五层,而tcp/ip协议只将七层概括为4层,我们将学习其中 ...
- Java中的对象和引用
<Java编程思想>中有一段关于对象的说法: "按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,'类'就是'类型'的同义词." 简 ...
- Free Goodies UVA - 12260 贪心
Free Goodies Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu [Submit ...
- HDU 1754 I Hate It(线段树区间求最值)
很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...
- JavaScript高级(01)
前端开发工具 1.1. WebStorm介绍和下载 l 介绍 WebStorm是JetBrains 推出的一款强大的HTML5编辑工具,拥有丰富的代码快速编辑,可以智能的补全代码.代码格式化.htm ...
- FPGA与PCI-E
从并行到串行: PCI Express(又称PCIe)是一种高性能.高带宽串行通讯互连标准,取代了基于总线的通信架构,如:PCI.PCI Extended (PCI-X) 以及加速图形端口(AGP). ...