给定一个列表定义:
(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) 我可以检查一个列表,但我仍然坚持如何浏览所有列表列表并附加值。
答案 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
功能完全正确或有任何故障。