从Racket

时间:2017-11-04 16:23:44

标签: racket racket-student-languages

我有以下代码:

(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中的整数或符号做到这一点?我认为它可以在递归过程中完成。

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

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我给你带来了好消息;这里有一本完整的教科书。这是How To Design Programs第二部分的主题,标题为“任意大数据”。有一个特定的设计方法适合于在列表上编写程序,例如您描述的列表。具体来说,通过9.1节阅读应该足以让你完成工作。

答案 1 :(得分:0)

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

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

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