Primitive function scheme中"third"是什么概念?
What is the concept of "third" in Primitive function scheme?
我是方案计算新手。
我有一个给定的问题:
(DEFINE (third C) (CAR(CDR CDR(C))))
(第三‘(A (B C) (D E) F))
我知道CDR和CAR的概念,但不明白“third”是做什么用的。我读到这是定义“三人组???”的一种方式。
我倾向于将 C 的值替换为第三个语句后的第二个语句的值,即‘(A (B C) (D E) F),这样正确吗?
你能用简单的术语解释一下这个给定的“第三者”做了什么吗?我该如何解决这个给定的问题?
在 lisps 中,列表是一种基本的数据结构,它由对组成。传统上,这对中的第一个成员称为 car,第二个成员称为 cdr:
( car . cdr )
这里的点表示该对由两个单元格组成。给定一对 (a . b)
,第一个成员的访问器也称为 car
,第二个成员的访问器称为 cdr
。所以:
(car '(a . b))
--> a
, and
(cdr '(a . b))
--> b
.
为了形成一个列表,对按以下方式组合:第一对的第一个成员是列表的第一个元素,第一对的第二个成员是空列表或代表列表的其余部分。因此,一个元素的列表,例如 (a)
由 (a . ())
.
对表示
两个元素的列表,例如 (a b)
由 (a . (b . ()))
对表示。这里,第一对的第二个成员是 (b . ())
对。您会注意到列表 (a b)
的 cdr
是列表 (b)
,或者等价于 (b . ())
.
三个元素的列表,例如 (a b c)
类似地表示为 (a . (b . (c . ())))
。列表是一对,其中包含空列表 ()
或 cdr
中的一对。这里要区分正确的列表(最后一对必须在其 cdr
中有一个 ()
)和不正确的列表,但我将在这里忽略这种区别。空列表也是一个列表(但不是一对)。为了使事情更精确一点:在 Scheme 中,列表要么是空列表,要么是 cdr 是列表的一对。
因此,car
获取列表的第一个成员,cdr
获取列表的其余部分。给定列表 (a b c d)
我们可以看到:
(cdr '(a b c d))
--> (b c d)
, and
(cdr (cdr '(a b c d)))
--> (cdr '(b c d))
--> (c d)
, and
(car (cdr (cdr '(a b c d))))
--> (car (cdr '(b c d)))
--> (car '(c d))
--> c
.
所以,给定定义:
(define (third xs)
(car (cdr (cdr xs))))
我们有:
> (third '(a b c d))
c
我将留给 OP 将此信息应用于以下问题:
(third '(a (b c) (d e) f))
--> ?
我是方案计算新手。
我有一个给定的问题:
(DEFINE (third C) (CAR(CDR CDR(C))))
(第三‘(A (B C) (D E) F))
我知道CDR和CAR的概念,但不明白“third”是做什么用的。我读到这是定义“三人组???”的一种方式。
我倾向于将 C 的值替换为第三个语句后的第二个语句的值,即‘(A (B C) (D E) F),这样正确吗?
你能用简单的术语解释一下这个给定的“第三者”做了什么吗?我该如何解决这个给定的问题?
在 lisps 中,列表是一种基本的数据结构,它由对组成。传统上,这对中的第一个成员称为 car,第二个成员称为 cdr:
( car . cdr )
这里的点表示该对由两个单元格组成。给定一对 (a . b)
,第一个成员的访问器也称为 car
,第二个成员的访问器称为 cdr
。所以:
(car '(a . b))
-->a
, and
(cdr '(a . b))
-->b
.
为了形成一个列表,对按以下方式组合:第一对的第一个成员是列表的第一个元素,第一对的第二个成员是空列表或代表列表的其余部分。因此,一个元素的列表,例如 (a)
由 (a . ())
.
两个元素的列表,例如 (a b)
由 (a . (b . ()))
对表示。这里,第一对的第二个成员是 (b . ())
对。您会注意到列表 (a b)
的 cdr
是列表 (b)
,或者等价于 (b . ())
.
三个元素的列表,例如 (a b c)
类似地表示为 (a . (b . (c . ())))
。列表是一对,其中包含空列表 ()
或 cdr
中的一对。这里要区分正确的列表(最后一对必须在其 cdr
中有一个 ()
)和不正确的列表,但我将在这里忽略这种区别。空列表也是一个列表(但不是一对)。为了使事情更精确一点:在 Scheme 中,列表要么是空列表,要么是 cdr 是列表的一对。
因此,car
获取列表的第一个成员,cdr
获取列表的其余部分。给定列表 (a b c d)
我们可以看到:
(cdr '(a b c d))
-->(b c d)
, and
(cdr (cdr '(a b c d)))
-->(cdr '(b c d))
-->(c d)
, and
(car (cdr (cdr '(a b c d))))
-->(car (cdr '(b c d)))
-->(car '(c d))
-->c
.
所以,给定定义:
(define (third xs)
(car (cdr (cdr xs))))
我们有:
> (third '(a b c d))
c
我将留给 OP 将此信息应用于以下问题:
(third '(a (b c) (d e) f))
--> ?