lisp学习笔记1

lisp程序员能够并且经常编写一些能够写程序的程序,对于程序生成程序的这种特性,

因为lisp是主流语言中唯一一个提供一些方便的抽象来让你完成这个任务的语言,所以

lisp是主流语言中唯一一个广泛运用这个特性的语言。

编程其实就是寻求编写最优美的程序  ---高德纳

lisp黑客精神可以用两句话概括:编程应该是有趣的,程序应该是优美的。

约翰麦卡锡和他的学生于1958年展开lisp的初次实现工作,lisp是继Fortran之后,仍在使用

的最古老的的程序语言,他仍然走在程序语言技术的最前面,懂lisp的程序员会告诉你,某种

东西使得lisp与众不同。

lisp与众不同的部分语言是它被设计成能够自己进化,当新的抽象概念风行时,这些新概念

在lisp中是最容易实现的,lisp就像DNA一样,永远不会过时。

程序语言教你不要做他没有提供的事情。因为可扩展的思想深植于lisp当中,使得lisp成为实现可扩展

软件的理想语言。

lisp是交互式的语言,任何系统都包含一个交互式的前端叫做顶层

数字对自身求值

CL-USER> 1

1

CL-USER>(+ 2 3)

5

在上述表达式中 + 是操作符  2 和 3 是参数

lisp使用的是波兰式 这是lisp最美好的东西

CL-USER>(+ 3 4 5)   就算有三个参数 也可以只使用一次 操作符 而

大多数编程语言 必须要写成这样 3 + 4 +5

前缀表达式的灵活性显著,lisp中 + 可以接受任意数目的参数,包括没有参数

CL-USER>(+)

0

因为操作符可以接收任意数目的参数,我们需要用括号来注明开始和结束

另一个lisp表示法美丽的地方是:它就是这么简单,所有lisp表达式要么是 1 这样的数

原子(atom),要么是包在括号中,由零个或者多个表达式组成的列表

在lisp中我们使用单一的表示法来表达所有的概念。

lisp求值规则:

1.首先对参数从左到右求值

2.参数的值传入以操作符命名的函数

如果参数本身也是函数调用,也遵循上面的规则

不是所有的操作符都是函数,但大部分是,而函数调用都是这样子求值的

一个不遵循lisp求值规则的 操作符是 quote  什么都不做,原样返回

CL-USER> (quote (+ 2 3))

(+ 2 3)

为了方便起见 使用 ‘ 缩写

作用是作为一种保护表达式被求值的方式

数据

整数(integer)

字符串(string)    使用双引号包裹

符号(symbol)     符号不对自身求值 通常要用 ‘ 引用

CL-USER>‘article

ARTICLE  通常他们被转换成大写

‘ 可以保护整个表达式不被求值

时间: 2024-10-08 17:02:13

lisp学习笔记1的相关文章

Common Lisp学习笔记(六)

6 list data structure 首先注意cons的用法 (cons 'w '(x y z)) -> (w x y z) 但是想在list的结尾添加一个元素就不能这样实现,eg, (cons '(w x y) 'z) -> ((w x y) . z) 6.3 the APPEND function append函数可以参数是两个list,并将两个list的元素合并在一起,如果其中有一个是nil,则结果和另一个list相同 > (append '(a b) '(c d)) (a

common Lisp学习笔记(十二)

12 Structure and The Type Syetem 12.2 typep, type-of 12.3 defining structures 12.5 accessing, modifying structs 12.6 kwargs to constructor functions 12.7 修改结构体定义 12.8 print func for structs 12.9 equality of structs 12.10 inheritance 12 Structure and

Common Lisp 学习笔记

特殊操作符.函数.宏 0.0 format CL-USER>(format t "hello world") ;t=>*standard-output* hello world NIL CL-USER>(format t "~a:~10t~a" "This is" "a shinny day") This is: a shinny day NIL ~a=>美化输出(如字符串去引号.关键字去前导冒号),消

Common Lisp学习笔记(九)

9 Input/Output 9.2 string 9.3 format 9.4 read 9.5 yes-or-no-p 9.6 with-open-file 9.7 writing files with with-open-file 9.8 parameters to format directives 9.9 file EOF 9 Input/Output 9.2 string string在lisp中用双引号括起来,它的值也是自己本身,和数字一样,string不是symbols stri

common Lisp学习笔记(十三)

lisp_chapter13 13 Arrays, Hash Tables, and Proterty Lists 13.2 array 13.5 make-array 13.6 string as vectors 13.7 hash tables 13.8 priority list lisp toolkit: room 13.11 coerce 13 Arrays, Hash Tables, and Proterty Lists 13.2 array 数组是内存中的一些连续的存储空间,一维的

Common Lisp学习笔记(十一)

11 Iteration and Block Structure 11.2 dotimes and dolist 11.4 recursive, iterative 11.6 比较dolist, mapcar, recursion 11.7 DO macro 11.8 隐式赋值的好处 11.9 do* 11.11 implicit blocks lisp toolkit: time 11.13 optional args 11.14 rest args 11.15 keyword args 11

Common Lisp学习笔记(七)

7 Applicative Programming 7.2 funcall 7.3 mapcar 7.4 manipulating tables with mapcar 7.5 lambda expressions 7.6 find-if 7.7 my-assoc 7.8 remove-if, remove-if-not 7.9 reduce 7.10 every debug tool: trace 7.11 operating on multiple lists 7.12 function函数

Common Lisp学习笔记(八)

8 Recursion 8.11 recursive templates 8.12 variations on the basic templates 8.13 trees and car/cdr recursion 8.14 helping functions 8 Recursion (defun fact (n) (cond ((zerop n) 1) (t (* n (fact (- n 1)))))) ex 8.4 (defun laugh (n) (cond ((zerop n) ni

Hadoop学习笔记(6) ——重新认识Hadoop

Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功能DFS和MapReduce, DFS可以理解为一个分布式文件系统,存储而已,所以这里暂时就不深入研究了,等后面读了其源码后,再来深入分析. 所以这里主要来研究一下MapReduce. 这样,我们先来看一下MapReduce的思想来源: alert("I'd like some Spaghetti!