Cadr值是什麼意思
在Common Lisp和Scheme等Lisp方言中,cadr'是一個函式,它是
car'和cdr'函式的組合。
car'函式返回列表的第一個元素(頭部),而`cdr'函式返回除第一個元素之外的所有元素(尾部)。
cadr'函式(也可以寫為
car-cdr')返回一個列表的第二個元素。這個名稱是car'和
cdr'的組合,因為要從列表中提取第二個元素,你需要先取第一個元素的`cdr'(即列表的剩餘部分),然後從這個剩餘列表中取第一個元素。
例如,考慮列表(1 2 3)
:
car
這個列表得到第一個元素1
。cdr
這個列表得到剩餘元素(2 3)
。cadr
這個列表得到第二個元素2
。
在Scheme中,cadr' 函式通常被定義為一個宏,以便在編譯時進行求值,而不是在運行時。以下是
cadr' 函式的可能定義:
(define-syntax cadr
(er-macro-transformer
(lambda (expr r c)
(let ((x (cadr r)))
(if (null? x)
(error "Too few arguments to CADR")
(list 'car (cons (car x) (cddr r))))))))
這個宏的工作原理是:它接受一個表達式(通常是列表),然後使用cadr' 宏的參數(
r')來獲取第二個元素。如果r' 是一個空列表,那麼就會拋出一個錯誤,因為
cadr' 需要至少兩個元素的列表。否則,它返回一個car' 操作的結果,這個操作是對
r' 的第一個元素(cadr' 的參數)和
cddr' 操作的結果(`r' 的剩餘部分)進行組合。
在Common Lisp中,cadr' 函式是內置的,可以直接使用。在其他的程式語言中,你可能不會遇到
cadr' 這個術語,因為它主要是Lisp家族語言特有的概念。