文章目录
- [1. Lisp简介](#1. Lisp简介)
- [2. 为什么学习Lisp?](#2. 为什么学习Lisp?)
- [3. 安装SBCL](#3. 安装SBCL)
- [4. Lisp的基础](#4. Lisp的基础)
-
- [4.1 数据结构](#4.1 数据结构)
- [4.2 基本操作](#4.2 基本操作)
- [4.3 条件语句](#4.3 条件语句)
- [4.4 函数定义](#4.4 函数定义)
- [4.5 递归](#4.5 递归)
- [5. Lisp的宏系统](#5. Lisp的宏系统)
- [6. 小结](#6. 小结)
大家好!今天我们将一起踏上一段旅程,探索一种独特且历史悠久的编程语言------Lisp。Lisp不仅仅是一种编程语言,它是一种思考和解决问题的方式。无论你是编程新手还是经验丰富的开发者,Lisp都能给你带来全新的视角。让我们开始吧!
1. Lisp简介
- Lisp,全称LISt Processing,是一种历史悠久的编程语言,由约翰·麦卡锡(John McCarthy)在1958年创造。
- Lisp是人工智能研究的先驱语言,它的设计哲学和特性对后来的编程语言产生了深远的影响。
- Lisp是动态类型、函数式和符号式编程语言的典范。
2. 为什么学习Lisp?
- 强大的表达力:Lisp的代码即数据特性使得它在表达复杂概念时非常简洁。
- 灵活的语法:Lisp的语法非常灵活,你可以轻松地扩展语言本身。
- 强大的宏系统:Lisp的宏系统允许你编写代码来生成代码,这是元编程的强大工具。
- 跨平台:Lisp可以在多种操作系统上运行,包括Unix、Windows和Mac OS。
3. 安装SBCL
- 执行命令:
sudo apt-get -y install sbcl
- 执行命令:sbcl --version,查看sbcl版本
- 进入sbcl交互环境
- 输出了一个字符串,定义了一个加法函数,然后调用加法函数,最后退出交互式环境
4. Lisp的基础
4.1 数据结构
- Lisp的主要数据结构是列表(list),列表可以包含任何类型的元素,包括其他列表。
- 例子:
(1 2 3)
、('a 'b 'c)
、(1 'a "hello")
4.2 基本操作
car
和cdr
是操作列表的基本函数,分别返回列表的第一个元素和剩余部分。- 例子:
(car '(1 2 3))
返回1
,(cdr '(1 2 3))
返回(2 3)
4.3 条件语句
-
Lisp的条件语句
cond
允许你根据条件执行不同的代码块。 -
例子:
lisp(cond ((> x 0) 'positive) ((= x 0) 'zero) ((< x 0) 'negative))
-
操作演示
4.4 函数定义
-
Lisp使用
defun
关键字来定义函数。 -
例子:
lisp(defun square (x) (* x x))
-
操作演示
4.5 递归
-
Lisp程序大量使用递归来处理问题。
-
例子:计算列表中所有数字的和。
lisp(defun sum-list (lst) (if (null lst) 0 (+ (car lst) (sum-list (cdr lst))))) (format t "sum of list = ~d~%" (sum-list '(1 2 3 4 5)))
-
编写LISP程序
sumoflist.lisp
,实现功能
-
运行LISP程序
sumoflist.lisp
,查看结果
5. Lisp的宏系统
-
Lisp的宏系统允许你编写代码来生成代码,这是Lisp的强大之处。
-
宏可以用来创建新的控制结构、数据结构和语法。
-
例子:定义一个简单的
my-when
宏。lisp(defmacro my-when (condition &body body) `(if ,condition (progn ,@body)))
-
操作演示
-
在Common Lisp中,
when
宏是一个非常有用的控制结构,它仅当指定的条件为真时才执行一组代码。正确地定义了when
宏,它展开为一个if
表达式,如果条件为真,则执行body
中的代码。 -
针对我们定义的
my-when
宏
lisp
(my-when (> 5 3)
(format t "5 is greater than 3.~%")
(print 'five-is-greater))
;; 输出:
;; 5 is greater than 3.
;; FIVE-IS-GREATER
-
操作演示
-
在这个例子中,
when
宏检查(> 5 3)
这个条件是否为真。由于5确实大于3,所以条件为真,when
宏执行它的body
,即打印字符串"5 is greater than 3."和值five-is-greater
。 -
如果条件为假,则
body
中的代码将不会执行
lisp
(my-when (< 5 3)
(format t "5 is less than 3.~%")
(print 'five-is-less))
;; 无输出,因为5不小于3
- 操作演示
- 在这个例子中,由于5不小于3,条件为假,所以
when
宏不执行任何操作,body
中的代码被跳过。
6. 小结
- Lisp是一种非常强大且灵活的编程语言,它的许多概念和特性对现代编程语言产生了深远的影响。通过今天的入门介绍,希望你能对Lisp有一个基本的了解,并激发你进一步探索和学习Lisp的兴趣。