scheme r5rs中如何表示如下数据结构

How to represent the following data structure in scheme r5rs

在Python中,数据结构如下所示:[([1 2 3], [8 9 10])](一个元组列表,其中元组的大小为 2,每个元组元素又是一个列表)

我如何在 Scheme r5rs 中表示相同的内容?

这是我试过的:(list (cons `(1 2 3) `(8 9 10)))

但是 运行 (display (list (cons `(1 2 3) `(8 9 10)))) 给出 (((1 2 3) 8 9 10)) 而我想要 (((1 2 3) (8 9 10)))

编辑
仅使用列表(根据@Will Ness 回答 ):

  (list             ; a pair of elements, 
    (list 1 2 3)      ; 1      each is itself
    (list 8 9 10)))   ; 2        a list 

有效。
我可以通过以下方式访问元组的第二个元素 (cadr (car x)) 给出 (8 9 10) (这是正确的)

我只是在想如何使用 cons 构建它,因为我的元组将只包含 2 个元素,据我所知 cons 用于表示 Scheme 中的一对。关于如何使用 cons?

执行此操作的任何想法

[([1 2 3], [8 9 10])] (a list of tuple, where tuple is of size 2, and each tuple element is a list again)

(list              ; a list of
  (list             ; a pair of elements, 
    (list 1 2 3)      ; 1      each is itself
    (list 8 9 10)))   ; 2        a list 

Scheme 是无类型的,所以我们可以只使用元组的列表。这种方式更简单——访问是统一的。第一个是car,第二个是cadr.

你的方法也对。真正决定它是否存在的是您如何访问您的数据以检索其成分。按照您的方式,您确实也可以:第一个元素将是 car,第二个元素是 cdr.

(问题编辑的更新:)无论您使用 (cons 1 (cons 2 '())) 还是 (list 1 2) 都无关紧要。内存中的结果结构是相同的。

表示数据的方式有无数种。已经向您介绍了一种方法。这是另一种方式:

(define mk/data
  (lambda (a b)
    (lambda (?)
      (cond ((eq? ? 'repr) (list (list a b)))
            ((eq? ? 'first) a)
            ((eq? ? 'second) b)))))

(define data/test (mk/data '(1 2 3) '(8 9 10)))

(data/test 'repr)
(data/test 'first)
(data/test 'second)

这是大系统实际表示数据的另一种方式。