Go to the first, previous, next, last section, table of contents.

リスト構造の変更

コンスセルの car ポインタと cdr ポインタは最終的に(訳注:ultimately) setcar と setcdr で変更されます (本当?? それらをリストする必要は)。コンスセルを変更する のに役立つ(その他の) primitive に関してはセクション 6.5 [delq]、ページ 56 を参 照して下さい。

Function: setcar cons object

この関数は、コンスセルの car ポインタをオブジェクトで置き換えます。結果は cons ではなく object です。

  (setq x '(1 2))
  => (1 2)
  (setcar x '4)
  => 4
  x
  => (4 2)

Function: setcdr cons object

この関数は、コンスセルの cdr ポインタをオブジェクトで置き換えます。結果 は、 cons ではなく object です。

  (setq x '(1 2))
  => (1 2)
  (setcdr x '(4))
  => (4)
  x
  => (1 4)

----------------

CN: Common Lisp における関数 rplaca, rplacd は setcar, setcdr に似ていますが、 これら Common Lisp の関数はコンスセルを返す一方、setcar, setcdr は car や cdr を返します。

----------------

Function: nconc &rest lists

この関数は、 lists の(全ての)要素を含むリストを返します。 append とは異な り、 lists はコピーはしません。 lists の各々の要素の(最後の) cdr ポインタ が次のリストを指すよう変更します。最後のアーギュメントは何であってもかまい ません。セクション 6.2 [append]、ページ 51 参照。

  (setq x '(1 2 3))
  => (1 2 3)
  (nconc x '(4 5))
  => (1 2 3 4 5)
  x
  => (1 2 3 4 5)

Function: reverse list

この関数は、 list の要素を逆順に持つリストを(新しく)作ります。 list は変更 しません。

  (setq x '(1 2 3 4))
  => (1 2 3 4)
  (reverse x)
  => (4 3 2 1)
  x
  => (1 2 3 4)

Function: nreverse list

この関数は、 list の要素を逆順にして返します。しかし reverse とは異なり、 list の cdr ポインタを変え、大きく(訳注:destructively) 変更します。結果は list の最後のコンスセルへのポインタで、(一般に) list はそれ自身の nreverse とは eq ではありません。

  (setq x '(1 2 3 4))
  => (1 2 3 4)
  x
  => (1 2 3 4)
  (nreverse x)
  => (4 3 2 1)
  x
  => (1)

Function: sort list predicate

この関数は、 preficate を用いて要素を比較することで list をソートします。 ソートされたリストを返します。

predicate は 2つのアーギュメントを持つ関数でなくてはいけません。これは list 中の 2つの要素を持って呼ばれます。小さい順にソートするためには、 predicate が、最初の要素が 2 番目の要素 "より小さい" の場合 t を、そうでな い場合 nil を返すようにしなくてはいけません。

それらがすでに順序通りそろっていることを predicate が示す場合、sort はその (全ての) 2 要素間におけるもとの順序関係を保持しなくてはいけません。

sort は cdr ポインタを変えることで list を変更します。 (...)

  (setq nums '(1 3 2 6 5 4 0))
  => (1 3 2 6 5 4 0)
  (sort nums '<)
  => (0 1 2 3 4 5 6)
  nums
  => (1 2 3 4 5 6)


Go to the first, previous, next, last section, table of contents.