从 Racket 中的结构创建列表

Create a list from structures in Racket

我有以下代码:

(define-struct p (x z))

(define-struct s (p my-symbol))

(define N01 (make-s (make-p 22 'a) 'symbol))
(define N02 (make-s (make-p 25 'b) 'symbol))
(define N03 (make-s (make-p 23 'c) 'symbol))

(define my-list (list N01 N02 N03))

现在我想要一个如下所示的列表:(list 22 25 23)(list 'a 'b 'c)

我知道当我调用这个 (p-x (s-p (first my-List))) 时我会得到 22,但是我如何才能对 my-List 中的整数或符号执行此操作?我认为它可以在递归过程中完成。

注意:我需要使用初级的列表缩写

感谢您的帮助!

我有个好消息要告诉你;有一整本教科书是为你写的。这是 How To Design Programs 第二部分的主题,标题为 "Arbitrarily Large Data." 有一个特定的设计方法专门用于在列表中编写程序,例如您描述的那个。具体来说,通读第 9.1 节应该足以让您完成工作。

首先创建一个函数,然后确定您需要它做什么。 你有了一个好的开始。首先使用设计配方来确定此功能将做什么。它将接受一个结构列表和 return 一个数字列表。 在此之后我们可以推断出当我们到达一个空列表时我们将终止循环。使用您制作的内容,我们可以创建此功能。

(define (get-p list)
 (cond [(empty? list) empty]
      [else (cons (p-x (s-p (first list))) (get-p (rest list)))]))

我鼓励您使用相同的策略来创建一个函数,该函数 return 是 my-List 中 Z 的列表。