(caadr exp) 在赋值变量中

(caadr exp) in assignment-variable

我正在阅读 4.1.2 Representing Expressions 的 SICP,

定义了definition-variable.

  (define (definition? exp)
    (tagged-list? exp 'define))

  (define (definition-variable exp)
    (if (symbol? (cadr exp))
        (cadr exp)
        (caadr exp))) ;;

参考条件

    (if (symbol? (cadr exp))
        (cadr exp)
        (caadr exp))) ;;

我不太确定 (caadr exp) 返回了什么?是 null 还是 '()

变量大小写

(define ⟨var⟩ ⟨value⟩)

(cadr exp) returns第二个元素作为变量,

但替代程序案例:

  (define (⟨var⟩ ⟨param₁⟩ … ⟨paramₙ⟩)
    ⟨body⟩)

表达式 (caadr exp))) 是 (car (car (cdr x)))

既然cadr是var,那么caadr是null?

在过程案例中,(cadr exp) 不是名称,而是第一个元素是名称的列表。

         (cadr exp)
             |
             v
         +-------+
         |       |
 (define (f a b c) body)  <--- exp
          ^
          |
      (caadr exp)

如果你评价它:

(caadr '(define (⟨var⟩ ⟨param₁⟩ … ⟨paramₙ⟩) ⟨body⟩))
-->
(caar '((⟨var⟩ ⟨param₁⟩ … ⟨paramₙ⟩) ⟨body⟩))
-->
(car '(⟨var⟩ ⟨param₁⟩ … ⟨paramₙ⟩))
-->
⟨var⟩