解析球拍中的列表

时间:2016-02-16 23:45:25

标签: racket

给定一个列表定义:

(define list
 '((a1 20 (1 a2) (3 a3))
  (a2 10 (2 a4))
  (a3 10 (1 a5) (2 a6) (3 a7))
  (a4 21)
  (a5 12)
  (a6 6 (1 a4) (2 a5))

) )

如何编写函数(sub' a1)将返回一个列表(a2 a3)。 我可以使用以下代码找到列表((1 a2)(3 a3)):

(define (sub val)
 (cdr(cdr(cond ((assq val list))
        (else 0)))))

但是在那之后我该怎么办才能得到我想要的元素?我试过做一些递归,但这只是引导圈子。任何建议将不胜感激。

第二个问题:一个只获取" a"数值小于或等于给定输入,即(测试10)将返回(a2 a3 a6) 我可以检查一个列表,但我仍然坚持如何浏览所有列表列表并附加值。

1 个答案:

答案 0 :(得分:0)

您需要的只是map功能。因此,要么使用您自己的sub函数,请执行以下操作:

(map cadr (sub 'a1))

或者更改您的功能以包含map

(define (sub val)
    (map cadr (cdr(cdr(cond ((assq val list))
        (else 0))))))

(cadr lst)只是(car (cdr lst))的快捷方式。我的Racket技能有点生疏,所以我不会说你的sub功能完全正确或有任何故障。