Cadr值是什麼意思

在Common Lisp和Scheme等Lisp方言中,cadr'是一個函式,它是car'和cdr'函式的組合。car'函式返回列表的第一個元素(頭部),而`cdr'函式返回除第一個元素之外的所有元素(尾部)。

cadr'函式(也可以寫為car-cdr')返回一個列表的第二個元素。這個名稱是car'和cdr'的組合,因為要從列表中提取第二個元素,你需要先取第一個元素的`cdr'(即列表的剩餘部分),然後從這個剩餘列表中取第一個元素。

例如,考慮列表(1 2 3)

在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家族語言特有的概念。