Lispはリスト処理に特化したプログラミング言語であり、cons、car、cdrはリストを操作するための基本的な関数です。以下にそれぞれの使い方を構文、サンプルコード、注意点とともに説明します。
cons
cons
は、引数として与えられた2つの要素から新しいリストを作成する関数です。新しいリストの先頭要素として第1引数が設定され、残りの要素は第2引数から構成されます。
構文
(cons object1 object2)
サンプルコード
(cons 1 '(2 3)) ;=> (1 2 3) (cons 'a '(b c)) ;=> (a b c) (cons '(1 2) '(3 4)) ;=> ((1 2) 3 4)
注意点
cons
の戻り値は、新しいリストの先頭要素を指すポインタです。- 第2引数がリストである場合、そのリストは新しいリストの末尾に繋がります。
cons
は、要素を1つだけ持つリストを作成するためにも使用できます。例えば、(cons 1 nil)
はリスト(1)
を作成します。
car
car
は、引数として与えられたリストの先頭要素を取得する関数です。
car構文
(car list)
carサンプルコード
(car '(1 2 3)) ;=> 1 (car '(a b c)) ;=> a (car '((1 2) 3 4)) ;=> (1 2)
car注意点
car
は、引数が空リスト( )
の場合、エラーを返します。
cdr
cdr
は、引数として与えられたリストの先頭要素を除いた残りの部分を取得する関数です。
cdr構文
(cdr list)
cdrサンプルコード
(cdr '(1 2 3)) ;=> (2 3) (cdr '(a b c)) ;=> (b c) (cdr '((1 2) 3 4)) ;=> (3 4)
cdr注意点
cdr
は、引数が空リスト( )
の場合、エラーを返しません。代わりに空リストを返します。- 引数が単一要素のリストの場合、
cdr
は空リストを返します。
list
Lispの list
関数は、複数のオブジェクトを要素として持つ新しいリストを作成するために使用されます。list
関数は可変引数を受け取るため、引数の数が可変的になる場合に非常に便利です。
以下に list
関数の構文、サンプルコード、および注意点を説明します。
list構文
(list &rest objects)
listサンプルコード
(list 1 2 3) ;=> (1 2 3) (list 'a '(b c) "d") ;=> (a (b c) "d") (list 1 "two" 'three) ;=> (1 "two" three)
list注意点
list
の戻り値は新しいリストであり、元の引数のリストとは異なります。list
関数は、可変長引数を受け取るため、引数の数が可変的になる場合に便利です。list
関数は、引数がない場合に空のリストを返します。- 引数に式を渡すことができます。この場合、式が評価された結果がリストの要素として追加されます。
今週のお題「変わった」