LISP - 内置函数
Lisp - 常用内置函数一览
Section titled “Lisp - 常用内置函数一览”Common Lisp 以其丰富的标准库而闻名,常被形容为“自带电池”(batteries included)。其庞大的内置函数集为各种任务提供了强大的工具。本章将对一些最基本的函数进行分类概述。
专家提示: 在交互式 Lisp 环境(如 SLIME 或 Sly)中查找函数时,可以使用 (apropos "-string-")。例如,(apropos "list") 将显示所有包含“list”的符号。使用 (describe 'symbol-name) 可以获取特定函数的信息。
序列和列表操作
Section titled “序列和列表操作”这些函数是 Lisp 编程的基石,用于创建和操作列表以及其他序列(如向量和字符串)。
cons:构造一个新的cons单元格,将元素添加到列表的开头。car/cdr:分别访问列表的第一个元素 / 列表的其余部分。list:从其参数创建一个新列表。append:将两个或多个列表连接成一个新列表。reverse:返回一个序列的新反转副本。length:返回序列中的元素数量。member:检查元素是否是列表的成员(默认使用eql)。
mapcar:将函数应用于列表的每个元素,返回一个包含结果的新列表。函数式编程的常用工具。
执行算术运算的函数。大多数可以接受多个参数。
+,-,*,/:加法、减法、乘法、除法。1+,1-:将数值加一或减一(例如,(1+ 5)的结果是6)。mod,rem:取模和取余运算。max,min:返回其数值参数的最大值或最小值。abs:返回数字的绝对值。expt:将一个数提升到指定幂次(例如,(expt 2 3)的结果是8)。
谓词(比较和类型检查)
Section titled “谓词(比较和类型检查)”返回 t 或 nil 的函数。
=,<,>,<=,>=,/=: 数值比较。eq,eql,equal,equalp:具有不同严格程度的通用相等性检查。null:检查对象是否是空列表nil。listp,numberp,stringp,symbolp:检查对象是否为特定类型。atom:检查对象是否为原子(即,不是cons单元格)。
用于指导执行流程的特殊运算符和宏。
if:基本的双向条件语句:(if condition then-form else-form)。when,unless:单向条件语句(仅当条件为真/假时执行主体)。cond:多向条件语句,类似于一系列的 if-else-if 检查。case:高效地将一个值与多个常量进行比较(使用eql)。let,let*:创建局部变量绑定。loop:Lisp 极其强大且多功能的迭代宏。dolist,dotimes:用于迭代列表和整数的更简单的宏。
输入/输出(I/O)
Section titled “输入/输出(I/O)”用于与流(如控制台或文件)交互的函数。
print,prin1,princ:以不同格式将 Lisp 对象打印到流中。format:一个强大且灵活的函数,用于生成格式化文本(类似于 C 语言中的printf)。例如,(format t "Hello, ~a!~%" "world")。read:从流中读取一个 Lisp 表达式。with-open-file:一个安全打开文件并确保之后关闭它的宏。
用于在代码中定义顶层构造的宏。
defun:定义一个命名函数。defvar,defparameter:定义一个全局(或“特殊”)变量。defmacro:定义一个宏,是扩展 Lisp 语法的强大工具。defpackage:定义一个新的包以组织代码。
这份列表仅仅是个开始。Common Lisp 的强大之处不仅在于这些函数本身,还在于它们如何组合在一起,以及您如何通过宏来扩展语言本身,使其完美适应您的特定问题领域。