Lisp学习笔记(一)
来源:互联网 发布:剑三冷艳毒姐捏脸数据 编辑:程序博客网 时间:2024/06/05 08:37
Lisp是20世纪50年代后期发明的一种记法形式,是为了能够某种特定形式的逻辑表达式(递归方程)的使用做推理。它并不是一种主流语言,但是它具有许多独有的特性,这些特性使它成为研究重要程序的设计、构造,以及各种数据结构,并将其关联于支持他们的语言特征的一种极佳媒介。这些特种中最重要的就是:计算过程的Lisp描述(过程)本身又可以作为Lisp的数据来表示和操作。
Lisp演化出许多版本,这里使用的是Scheme,编译器使用DrScheme。
表达式
Scheme中的表达式是一种前缀表示:
(+ 100 200) 300(* 4 8)32(* (- 9 6) (+ 7 8))45
将表达式直接键入到解释器中,就会得到表达式下面相应的结果。
变量命名
Scheme中,通过define关键字来给变量命名。
(define PI 3.14159)(define radius 10)(* PI (* radius radius))3.14159
复合过程
过程是一种抽象技术,它可以为复合操作提供名字,这样我们就可以方便的进行调用。下面是一个平方的过程:
(define (square x) (* x x))
定义好之后,我们就可以调用它:
(square 3)9
还可以利用它去定义其他过程:
(define (sum-of-square x y) (+ (square x) (square y)))
为了求值一个组合式,解释器将对组合式的各个元素求值,而后将得到的那个过程应用于那些实际的参数。求值方式分为两种:
正则序求值。“完全展开而后规约”。
(sum-of-square (* 2 3) (+ 2 3))
(+ (square (* 2 3)) (square (+ 2 3)))
(+ (* (* 2 3) (* 2 3)) (* (+ 2 3) (+ 2 3)))
(+ (* 6 6) (* 5 5))
(+ (36 25))
61应用序求值。“先求值参数而后应用”。
(sum-of-square (* 2 3) (+ 2 3))
(sum-of-square 6 5)
(+ (square 6) (square 5)))
(+ (* 6 6) (* 5 5))
(+ (36 25))
61
Lisp采用应用序求值,部分原因在于这样做可以避免对于表达式的重复求值。
下面给出一个利用牛顿法求平方根的例子:
#lang scheme(define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) x) ) )(define (improve guess x) (average guess (/ x guess)) )(define (average x y) (/ (+ x y) 2) )(define (good-enough? guess x) (< (abs (- (square guess) x)) 0.001) )(define (square x) (* x x) )(define (abs x) (cond ((> x 0) x) ((= x 0) x) ((< x 0) (- x)) ) )(define (sqrt x) (sqrt-iter 1.0 x) )(sqrt 9)
- Lisp学习笔记(一)
- LISP 学习笔记 (一)-初识LISP,表达式写法
- COMMON LISP语言学习笔记(一)
- Practical Common Lisp学习笔记(一)
- lisp学习总结(一)
- <<Practical Common Lisp>> 学习笔记一
- Lisp学习笔记(三)
- Lisp学习笔记(二)
- Lisp学习笔记(四)
- Common Lisp学习笔记之一(序章)
- Common Lisp 学习笔记(1)
- lisp学习笔记
- common lisp 学习笔记
- lisp-Scheme学习笔记
- Common Lisp 学习笔记
- ANSI Common Lisp 笔记一
- lisp 函数(一)
- Programming in Emacs Lisp笔记(一)表处理
- www.chinaphonesale.com90213
- C++标准库---stack
- 对话框UIAlertView
- Linux添加环境变量和Django自动切换配置文件版本
- 代理模式
- Lisp学习笔记(一)
- Lisp学习笔记(三)
- UITableView
- Lisp学习笔记(二)
- IOS状态栏
- lua + libuv 的坑与爽
- 1029. Median (25) (easy way)
- mac os x中安装mysql+phpmyadmin的方法记录
- Foundation中的常用结构体 Range、Point、Size和Rect