Lispのlistの使い方【cons,car,cdr,list】

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

Lisplist 関数は、複数のオブジェクトを要素として持つ新しいリストを作成するために使用されます。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 関数は、引数がない場合に空のリストを返します。
  • 引数に式を渡すことができます。この場合、式が評価された結果がリストの要素として追加されます。

今週のお題「変わった」