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)) --> ?