0

我有以下代码:

(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?我认为它可以在递归过程中完成。

注意:我需要使用带有列表缩写的初学者级别

谢谢您的帮助!

4

2 回答 2

0

我有好消息要告诉你;有一整本教科书是为你写的。这是如何设计程序的第二部分的主题,标题为“任意大数据”。有一个特定的设计配方专门用于在您描述的列表上编写程序。具体来说,通读第 9.1 节应该足以让您完成工作。

于 2017-11-04T19:12:07.650 回答
0

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

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

我鼓励您使用相同的策略来创建一个从 my-List 返回 Z 列表的函数。

于 2017-11-04T22:57:29.527 回答