Scheme函数式编程
# 前言
# 简介
Scheme 是 Lisp (opens new window) 的一个变种,而 Lisp 是继 Fortran (opens new window) 之后仍然广受欢迎的第二古老的编程语言。Lisp 程序员社区几十年来持续蓬勃发展,Clojure (opens new window) 等 Lisp 的新方言拥有现代编程语言中增长最快的开发人员社区。如果你想亲手试试本文中的例子,可以下载一个 Scheme 的解释器 (opens new window) 来操作。
# 安装scheme
# Linux
打开终端。
使用
wget
命令来下载 Racket 安装包。可以在 Racket 官方网站上找到适合你的 Linux 版本的下载链接。例如,使用以下命令下载 Racket 8.4版本:
wget https://mirror.racket-lang.org/installers/8.4/racket-8.4-x86_64-linux.sh
1这里假设下载的是 64 位 Linux 的安装包,你需要根据自己的系统架构选择对应的安装包。
下载完成后,你可以运行下载的安装脚本来安装 Racket。确保你已经有执行权限:
chmod +x racket-8.4-x86_64-linux.sh
1运行安装脚本:
./racket-8.4-x86_64-linux.sh
1按照安装向导的指示完成 Racket 的安装过程,并根据需要配置环境变量等。
racket 启动!
# win
https://racket-lang.org/download/ (opens new window)
# key point
- 在 Scheme 中,任何不被求值的表达式都被称为被引用。
- 抽象是解决复杂性问题的第一要素
- 这种引用的概念源自一个经典的哲学区分,即一种事物(比如一只狗)会四处奔跑和吠叫,而“狗”这个词是一种语言构造,用来指代这种事物。当我们在引号中使用“狗”时,我们并不是指代某只特定的狗,而是指代一个词语。
# 样式
(+ (* 3 5) (- 10 6))
定义函数
(define (square x) (* x x))
1
2
3
4
5
6
2
3
4
5
6
使用嵌套定义和递归定义了一个用于计算平方根的迭代过程:
(define (sqrt x)
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))
(sqrt 9)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
迭代分为两个部分:进入条件和逼近函数
good-enough?
为条件improve
为逼近函数
不断迭代知道逼近最小值
> (define (sqrt x)
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.001))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))
> (sqrt 9)
3.001
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 拓展
- 还可以操作文件流之类
- 例如AI脚本也会涉及到这种LISP语言
- 目前还不知道函数式编程语言有什么用,有机会再看【17kk】