関数に渡すべきデータの種類は、その関数がどのような情報を用いるかによって異なります。+のような関数の引数は、+が数値を加算するため、数値である必要があります。他の関数では、引数に異なる種類のデータを用います。
例えば、concat
関数は2つ以上のテキスト文字列を連結または結合して、1つの文字列を生成します。引数は文字列です。2つの文字文字列 abc と def を連結すると、単一の文字列 abcdef が生成されます。これは、以下を評価することで確認できます。
(concat "abc" "def")
この式を評価して得られる値は "abcdef" です。
substring
のような関数は、文字列と数値の両方を引数として受け取ります。この関数は、文字列の一部、すなわち第1引数の部分文字列を返します。この関数は3つの引数を取ります。第1引数は文字の文字列であり、第2および第3引数は部分文字列の開始位置(含む)と終了位置(含まない)を示す数値です。これらの数値は、文字列の先頭からの文字数(スペースや句読点を含む)を表しています。なお、文字列内の文字は1ではなく0から番号が振られている点に注意してください。
例えば、以下を評価する場合:
(substring "The quick brown fox jumped." 16 19)
エコーエリアに "fox" が表示されます。引数は文字列と2つの数値です。
なお、substring
に渡される文字列は、スペースで区切られた複数の単語で構成されていても、単一のアトムであることに注意してください。Lisp
は、スペースを含め、2つの引用符の間にあるすべてを文字列の一部としてカウントします。substring
関数は、本来分割不可能なアトムから一部を抽出するため、いわば「アトム・スマッシャー」のようなものだと考えることができます。ただし、substring
が部分文字列を抽出できるのは、文字列である引数からのみであり、数値やシンボルといった他の種類のアトムからは抽出できません。