我有一份表格1((1(8 3))(2(4 5 7))(3(6 7)))
我也有一个表格2(2 3)
我想要一个列表,其中包含list1中每一对中的所有第二个元素,其中第一个元素位于list2中。
在我们的案例中,结果将是(4 5 7 6 7)
我在想这样的事情,但我完全糊涂了!
(define (returnlist l1 l2)
(
cond(( equal? (map car l1)) (car l2)) ( cdr(car l1)))
(else (returnlist l1 (cdr l2) )
)
))
答案 0 :(得分:0)
此解决方案有几个步骤:
list2
的元素(对此使用filter
)map
将有用)apply
+ append
将保存当天)这就是我的意思:
(define (returnlist l1 l2)
(apply append ; step 3
(map cadr ; step 2
(filter (lambda (e) ; step 1
(member (car e) l2))
l1))))
结果将符合预期:
(define list1 '((1 (8 3)) (2(4 5 7)) (3 (6 7))))
(define list2 '(2 3))
(returnlist list1 list2)
=> '(4 5 7 6 7)
答案 1 :(得分:0)
这是一个递归版本:
(define (returnlist l1 l2)
(if (empty? l1)
'()
(let* ((c (car l1)) (c1 (car c)))
(if (member c1 l2)
(append (cadr c) (returnlist (cdr l1) l2))
(returnlist (cdr l1) l2)))))
然后
(returnlist '((1 (8 3)) (2 (4 5 7)) (3 (6 7))) '(2 3))
=> '(4 5 7 6 7)