星期六, 四月 21, 2007

LISP 学习笔记(1)

在徐x的知道下开始尝试看看LISP,来到了有名的LISP学习站点:http://mitpress.mit.edu/sicp/,MIT出的东西还是非常经典的。

下了个 DrScheme,可视化的Scheme学习、调试工具,带有交互式的界面,非常棒,很容易就上手了。

LISP 的语法要比大多数编程语言要简单的多了,都是靠括号来表示代码段,看起来比较古怪,但是读起来还是比较容易接受的。看了第一章,介绍了牛顿求平方根的算法,真是长见识了,于是立即打开 Python,按照相同的逻辑写了一个,很有意思。

;; Scheme Code
(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 (square x) (* x x))

(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))

(define (sqrtx x)
(sqrt-iter 1.0 x))

# Python Code
def sqrt(x, guess=1.0):
if abs(guess ** 2 - x) < 0.001:
return guess
else:
q = x / guess
guess = ((x / guess) + guess) / 2
return sqrt(x, guess)

毕竟 LISP 是一门函数式编程语言,所以写法上还是定义了一堆小函数,再加上递归把值给求了出来。

没有评论: