Cdr

提供:GizmoLabs - だいたい CAD LISP なサイト
構文
(cdr list)


機能
指定されたリストの先頭の要素以外のすべての要素を含むリストを返す。
CDR = Construct’s DORSAL Reference の略らしい。


引数
  • list : リスト


戻り値
list の先頭の要素以外のすべての要素を含むリスト(ただし、下の注を参照)。
リストが空の場合、cdr 関数は nil を返す。
  • 注:list 引数がドット ペアの場合、リスト内に含めずに第 2 要素を返す。
サンプル
(cdr '(a b c)) 
(B C)
; ---

 (cdr '((a b) c)) 
 (C)

; ---
 (cdr '()) 
 nil

; ---
 (cdr '(a . b)) 
 B

; ---
 (cdr '(1 . "Text")) 
 "Text"
; ---
 (setq a '("one" "two" "three" "four")
 ("one" "two" "three" "four")  
 (setq b (cdr a))
 ("TWO" "THREE" "FOUR")  

MEMO
AutoLISP は、car と cdr の連結を 4 レベルの深さまでサポートする。
つまり、次の関数が有効。
caaaar  cadaar  cdaaar  cddaar
caaadr  cadadr  cdaadr  cddadr
caaar   cadar   cdaar   cddar
caadar  caddar  cdadar  cdddar
caaddr  cadddr  cdaddr  cddddr
caadr   caddr   cdadr   cdddr
caar    cadr    cdar    cddr
これらの連結は、car と cdr の呼び出しをネストしたものと同じ。
各 a は car の呼び出しを表し、各 d は cdr の呼び出しを表す。
例: (setq x '((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4) (x5 y5 z5) (x6 y6 z6))) に対して
  • (caar x) は (car (car x)) と同じ = x1
  • (cadar x) は (car (cdr (car x))) と同じ = y1
  • (caddar x) は (car (cdr (car x))) と同じ = z1
  • (cdar x) は (cdr (car x)) と同じ = (y1 z1)
  • (cddr x) は (cdr (cdr x)) と同じ = ((x3 y3 z3) (x4 y4 z4) (x5 y5 z5) (x6 y6 z6))
  • (cadr x) は (car (cdr x)) と同じ = (x2 y2 z2)
  • (caddr x) は (car (cdr (cdr x))) と同じ = (x3 y3 z3)
  • (cadddr x) は (car (cdr (cdr (cdr x)))) と同じ = (x4 y4 z4)
  • (caddddr x) は (car (cdr (cdr (cdr (cdr x))))) と同じ = エラー(ネストが5レベルになるので)

関連事項