《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究竟是何方神圣?我迫不及待的想去弄个明白。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lisp的本质 - climbdream的个人空间 - 开源中国社区https://my.oschina.net/...
    葡萄喃喃呓语阅读 714评论 0 10
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,754评论 18 399
  • 昨天的梦境很奇特,有记下来的冲动。 梦从什么时候开始的? 记得是一间房子,装修很奇特,气氛也很暧昧,房子里面有两张...
    月光银鹿阅读 111评论 0 1
  • 如果感到思绪繁杂,不妨去写一行漂亮的字,那划动的笔尖总会帮助你梳理千头万绪; 如果感到心头乏闷,不妨去说一句舒心的...
    我不是哪根葱阅读 345评论 0 0
  • 在使用ionic做项目的时候,发现 项目存在一个hooks文件夹,查找相关资料做个简单记录官方文档:http://...
    谢大见阅读 1,151评论 0 1