1.8.1 参数的数据类型

应该传递给函数的数据类型,取决于函数要处理的信息类型。像 + 这样的函数,其参数必须是数字类型的值,因为 + 的作用是做加法。其他函数则会使用不同类型的数据作为参数。

例如,concat 函数会将两个或多个文本字符串连接成一个新字符串,它的参数是字符串。将两个字符串 abcdef 连接,会得到单个字符串 abcdef。对下面表达式求值即可看到效果:

(concat "abc" "def")

该表达式求值后返回的值为 "abcdef"

substring 这样的函数,同时使用字符串和数字作为参数。该函数会返回字符串的一部分,即第一个参数的子串(substring)。该函数接收三个参数:第一个参数是字符组成的字符串,第二个和第三个参数是数字,分别表示子串的起始位置(包含)和结束位置(不包含)。数字是从字符串开头计算的字符个数(包括空格和标点)。注意,字符串中的字符从 0 开始编号,而非 1。

例如,对下面表达式求值:

(substring "The quick brown fox jumped." 16 19)

你会在回显区看到 "fox"。参数分别是字符串和两个数字。

注意,传递给 substring 的字符串虽然由多个带空格的单词组成,但仍然是一个单独的原子。Lisp 会将两个双引号之间的所有内容(包括空格)都算作字符串的一部分。你可以把 substring 函数想象成原子拆分器,它能从一个原本不可分割的原子中提取一部分内容。不过,substring 只能从字符串类型的参数中提取子串,无法处理数字或符号等其他类型的原子。