了解宏
Understanding a macro
据我理解下面写的宏;该宏接受 3 个参数并生成一个结构,该结构具有接受 3 个参数的构造函数。我可以猜测紧跟在宏定义之后的行创建了一个结构,它看起来像:
(struct x (+ y x))
我不明白后面的两条线是如何工作的。看起来 y 绑定到 x struct,但它不是用太多参数调用构造函数吗?
(define-syntax binary-search
(syntax-rules ()
[(binary-search (node left right))
(struct left (node right x))]))
(binary-search (+ x y))
(define y (x 1 2 3))
(+ (x-+ y) (x-x y))
我不会打扰并询问最后一行是如何工作的,希望对 y 变量的澄清将使我得到给定的答案 4.
这里令人困惑的是字段名称可以与结构名称相同。
考虑这个例子:
#lang racket
(struct foo (foo) #:transparent)
(foo 42) ; => (foo 32)
(foo-foo (foo 42)) ; => 32
所以 (binary-search (+ x y))
结果是:
(struct x (+ y x))
定义了一个 x
结构体,该结构体有一个命名为 x
.
行
(define y (x 1 2 3))
创建一个 x 结构,其中:
the + field stores 1,
the y field stores 2,
the x field stores 3.
现在(x-+ y)
获取y
的+
字段,即1
(x-x y)
获取 y
的 x
字段,即 3。
这意味着 (+ (x-+ y) (x-x y))
的计算结果为 4.
据我理解下面写的宏;该宏接受 3 个参数并生成一个结构,该结构具有接受 3 个参数的构造函数。我可以猜测紧跟在宏定义之后的行创建了一个结构,它看起来像:
(struct x (+ y x))
我不明白后面的两条线是如何工作的。看起来 y 绑定到 x struct,但它不是用太多参数调用构造函数吗?
(define-syntax binary-search
(syntax-rules ()
[(binary-search (node left right))
(struct left (node right x))]))
(binary-search (+ x y))
(define y (x 1 2 3))
(+ (x-+ y) (x-x y))
我不会打扰并询问最后一行是如何工作的,希望对 y 变量的澄清将使我得到给定的答案 4.
这里令人困惑的是字段名称可以与结构名称相同。 考虑这个例子:
#lang racket
(struct foo (foo) #:transparent)
(foo 42) ; => (foo 32)
(foo-foo (foo 42)) ; => 32
所以 (binary-search (+ x y))
结果是:
(struct x (+ y x))
定义了一个 x
结构体,该结构体有一个命名为 x
.
行
(define y (x 1 2 3))
创建一个 x 结构,其中:
the + field stores 1,
the y field stores 2,
the x field stores 3.
现在(x-+ y)
获取y
的+
字段,即1
(x-x y)
获取 y
的 x
字段,即 3。
这意味着 (+ (x-+ y) (x-x y))
的计算结果为 4.