mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-11-23 22:27:35 +03:00
Merge pull request #439 from macdavid313/master
[common-lisp/zh-cn] Just update and correct some contents
This commit is contained in:
commit
4c95f6570e
@ -1,10 +1,10 @@
|
||||
---
|
||||
Language: "Common Lisp"
|
||||
Filename: commonlisp.lisp
|
||||
Contributors:
|
||||
Contributor:
|
||||
- ["Paul Nathan", "https://github.com/pnathan"]
|
||||
Translator:
|
||||
- ["Mac David", "http://github.com/macdavid313"]
|
||||
- ["Mac David", "http://macdavid313.com"]
|
||||
---
|
||||
|
||||
ANSI Common Lisp 是一个广泛通用于各个工业领域的、支持多种范式的编程语言。
|
||||
@ -31,9 +31,9 @@ ANSI Common Lisp 是一个广泛通用于各个工业领域的、支持多种范
|
||||
|
||||
t ;还是一个原子,代表逻辑真值。
|
||||
|
||||
(+ 1 2 3 4) ; 一个S表达式。
|
||||
(+ 1 2 3 4) ; 一个S-表达式。
|
||||
|
||||
'(4 :foo t) ;同样是一个S表达式。
|
||||
'(4 :foo t) ;同样是一个S-表达式。
|
||||
|
||||
|
||||
;;; 注释
|
||||
@ -146,7 +146,7 @@ nil ; 逻辑假,或者空列表
|
||||
(defparameter *AΛB* nil)
|
||||
|
||||
|
||||
;; 访问一个在之前从未未绑定的变量是一种不规范的行为(即使依然是可能发生的);
|
||||
;; 访问一个在之前从未被绑定的变量是一种不规范的行为(即使依然是可能发生的);
|
||||
;; 不要尝试那样做。
|
||||
|
||||
|
||||
@ -211,7 +211,7 @@ nil ; 逻辑假,或者空列表
|
||||
|
||||
;;; 向量
|
||||
|
||||
;; 向量的字面意义是一个定长数组(译者注:此处所谓字面意义的,即为#(......)的形式,下文还会出现)
|
||||
;; 向量的字面意义是一个定长数组(译者注:此处所谓“字面意义”,即指#(......)的形式,下文还会出现)
|
||||
#(1 2 3) ; => #(1 2 3)
|
||||
|
||||
;; 使用`concatenate`来将两个向量首尾连接在一起
|
||||
@ -282,10 +282,12 @@ nil ; 逻辑假,或者空列表
|
||||
(gethash 'a *m*) ; => 1, t
|
||||
|
||||
;; 注意此处有一细节:Common Lisp的`gethash`往往会返回两个值。
|
||||
;; (译者注:返回的第一个值表示给定的键所对应的值或者nil,第二个则表示在哈希表中是否存在这个给定的键)
|
||||
;;(译者注:返回的第一个值表示给定的键所对应的值或者nil;)
|
||||
;;(第二个是一个布尔值,表示在哈希表中是否存在这个给定的键)
|
||||
;; 例如,如果可以找到给定的键所对应的值,则返回一个t,否则返回nil
|
||||
|
||||
;; 由给定的键检索一个不存在的值,则返回nil(译者注:即第一个nil,第二个nil其实是指该键在哈希表中也不存在)
|
||||
;; 由给定的键检索一个不存在的值,则返回nil
|
||||
;;(译者注:这个nil是第一个nil,第二个nil其实是指该键在哈希表中也不存在)
|
||||
(gethash 'd *m*) ;=> nil, nil
|
||||
|
||||
;; 给定一个键,你可以指定其对应的默认值:
|
||||
@ -310,7 +312,7 @@ nil ; 逻辑假,或者空列表
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; 使用`lambda`来创建一个匿名函数。
|
||||
;; 一个函数总是返回其最后一个表达式的值。
|
||||
;; 一个函数总是返回其形式体内最后一个表达式的值。
|
||||
;; 将一个函数对象打印出来后的形式是多种多样的...
|
||||
|
||||
(lambda () "Hello World") ; => #<FUNCTION (LAMBDA ()) {1004E7818B}>
|
||||
@ -352,7 +354,7 @@ nil ; 逻辑假,或者空列表
|
||||
; => Hello, Steve, from the alpacas
|
||||
|
||||
|
||||
;; 当然,你也可以设置关键字形参;
|
||||
;; 当然,你也可以设置所谓关键字形参;
|
||||
;; 关键字形参往往比可选形参更具灵活性。
|
||||
|
||||
(defun generalized-greeter (name &key (from "the world") (honorific "Mx"))
|
||||
@ -377,7 +379,7 @@ nil ; 逻辑假,或者空列表
|
||||
;;(译者注:抱歉,翻译水平实在有限,下面是我个人的补充说明)
|
||||
;;(`eql`在二者`eq`等价,或者同为数字与字符下相同的类型,例如同为整形数或浮点数,并且他们的值相等时,二者`eql`等价)
|
||||
;; (想要弄清`eql`,其实有必要先了解`eq`)
|
||||
;;(可以去CLHS上分别查看两者的文档,另外,《实用Common Lisp编程》里的4.8节也提到了两者的区别)
|
||||
;;(可以去CLHS上分别查看两者的文档,另外,《实用Common Lisp编程》的4.8节也提到了两者的区别)
|
||||
(eql 3 3) ; => t
|
||||
(eql 3 3.0) ; => nil
|
||||
(eql (list 3) (list 3)) ; => nil
|
||||
@ -455,7 +457,7 @@ nil ; 逻辑假,或者空列表
|
||||
|
||||
;; 所谓好的Lisp编码风格就是为了减少破坏性函数的使用,防止副作用的发生。
|
||||
;;(译者注:很惭愧,确实不明白原作者所说的"Mutation",即这里的“变异”到底指的是什么特性)
|
||||
;;(毕竟他只给了一个例子,我猜测应该是和词法变量、闭包等特性有关,还望高人指点)
|
||||
;;(我猜测应该是和词法变量、闭包等特性有关,还望高人指点、修正与完善)
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; 7. 类与对象
|
||||
@ -501,7 +503,7 @@ nil ; 逻辑假,或者空列表
|
||||
:initarg :number-of-rowers)))
|
||||
|
||||
|
||||
;; 在REPL中对human-powered-conveyance类调用`DESCRIBE`如下:
|
||||
;; 在REPL中对human-powered-conveyance类调用`DESCRIBE`后结果如下:
|
||||
|
||||
(describe 'human-powered-conveyance)
|
||||
|
||||
@ -533,7 +535,7 @@ nil ; 逻辑假,或者空列表
|
||||
|
||||
;; pi在Common Lisp中已经是一个内置的常量。
|
||||
|
||||
;; 假设我们已经知道效率值(“efficiency value”)和船桨数大概呈对数关系;
|
||||
;; 假设我们已经知道了效率值(“efficiency value”)和船桨数大概呈对数关系;
|
||||
;; 那么效率值的定义应当在构造器/初始化过程中就被完成。
|
||||
|
||||
;; 下面是一个如何初始化实例的例子:
|
||||
@ -548,15 +550,13 @@ nil ; 逻辑假,或者空列表
|
||||
; => 2.7725887
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; 8. 宏
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;; 宏可以让你扩展语法
|
||||
|
||||
;; Common Lisp并没有自带WHILE循环——所以让我们自己来为他添加一个;
|
||||
;; 例如,Common Lisp并没有自带WHILE循环——所以让我们自己来为他添加一个;
|
||||
;; 如果按照“拼装者”的直觉来看,我们会这样写:
|
||||
|
||||
(defmacro while (condition &body body)
|
||||
@ -573,7 +573,6 @@ nil ; 逻辑假,或者空列表
|
||||
|
||||
;; 让我们来看看它的高级版本:
|
||||
|
||||
|
||||
(defmacro while (condition &body body)
|
||||
"While `condition` is true, `body` is executed.
|
||||
|
||||
@ -589,7 +588,7 @@ nil ; 逻辑假,或者空列表
|
||||
;; 注意到反引号'`',逗号','以及'@'符号,这三个符号;
|
||||
;; 反引号'`'是一种所谓“quasiquote”的引用类型的运算符,有了它,之后的逗号“,”才有意义。
|
||||
;; 逗号“,”意味着解除引用(unquote,即开始求值);“@”符号则表示将当前的参数插入到当前整个列表中。
|
||||
;;(译者注:这三个符号只不过是语法糖罢了,而要想真正用好、用对,需要下一番功夫)
|
||||
;;(译者注:要想真正用好、用对这三个符号,需要下一番功夫)
|
||||
;;(甚至光看《实用 Common Lisp 编程》中关于宏的介绍都是不够的)
|
||||
;;(建议再去读一读Paul Graham的两本著作《ANSI Common Lisp》和《On Lisp》)
|
||||
|
||||
@ -610,3 +609,6 @@ nil ; 逻辑假,或者空列表
|
||||
非常感谢Scheme社区的人们,我基于他们的成果得以迅速的写出这篇有关Common Lisp的快速入门
|
||||
同时也感谢
|
||||
- [Paul Khuong](https://github.com/pkhuong) ,他提出了很多有用的点评。
|
||||
|
||||
##译者寄语
|
||||
“祝福那些将思想镶嵌在重重括号之内的人们。”
|
Loading…
Reference in New Issue
Block a user