《ANSI Common Lisp》- 第一章:简介【笔记】

Lisp 与众不同的部分原因是,它被设计成能够自己进化。你能用 Lisp 定义新的 Lisp 操作符。当新的抽象概念风行时(如面向对象程序设计),我们总是发现这些新概念在 Lisp 是最容易来实现的。Lisp 就像生物的 DNA 一样,这样的语言永远不会过时。

1.1 新的工具 (New Tools)

为什么要学 Lisp?因为它让你能做一些其它语言做不到的事情。如果你只想写一个函数来返回小于 n 的数字总和,那么用 Lisp 和 C 是差不多的:

; Lisp

(defun sum (n)

    (let ((s 0))

        (dotimes (i n s)

            (incf s i))))

/* C */

int sum(int n){

    int i,s=0;

    for(i=0; i < n; i++)

        s+=i;

    return(s);

}

如果你只想做这种简单的事情,那用什么语言都不重要。假设你想写一个函数,输入一个数 n ,返回把 n 与传入参数 (argument)相加的函数。

; Lisp

(defun addn (n)

    #'(lambda (x) 

        (+ x n)))

在 C 语言中 addn 怎么实现?你根本写不出来。

1.2 新的技术 (New Techniques)

如上一节所提到的, Lisp 赋予你别的语言所没有的工具。不仅仅如此,就 Lisp 带来的新特性来说 ── 自动内存管理 (automatic memory management),显式类型 (manifest typing),闭包 (closures)等 ── 每一项都使得编程变得如此简单。结合起来,它们组成了一个关键的部分,使得一种新的编程方式是有可能的。

Lisp 被设计成可扩展的:让你定义自己的操作符。这是可能的,因为 Lisp 是由和你程序一样的函数与宏所构成的。所以扩展 Lisp 就和写一个 Lisp 程序一样简单。事实上,它是如此的容易(和有用),以至于扩展语言自身成了标准实践。当你在用 Lisp 语言編程时,你也在创造一个适合你的程序的语言。你由下而上地,也由上而下地工作。

... ...

除非你相当熟悉 Lisp ,这个简介像是无意义的言论和冠冕堂皇的声明。Lisp 凌驾面向对象程序设计? 你创造适合你程序的语言? Lisp 编程是即时的? 这些说法是什么意思?现在这些说法就像是枯竭的湖泊。随着你学到更多实际的 Lisp 特色,见过更多可运行的程序,这些说法就会被实际经验之水所充满,而有了明确的形状。

1.3 新的方法 (New Approach)

强大的好奇心驱使着我断续往下看下去,而且这感觉起来越强烈!Lisp究竟是何方神圣?我迫不及待的想去弄个明白。

你可能感兴趣的:(《ANSI Common Lisp》- 第一章:简介【笔记】)