从列表中的每个对中删除一个值,其中该对的第一个元素位于另一个列表中

时间:2013-11-14 03:42:50

标签: list scheme element

这真令人困惑......

假设我们有2个列表

(define abc  '((1 (1 2 3)) (2 (2 3)) (4 (1 3))))
(define keys '(1 2))

(define value 2)

我想编写一个删除所提供值的函数,从第一个列表的每一对中的第二个元素开始,该列表中第一个元素位于第二个列表中

eg. define deleteValue(abc keys value )

and result   '((1 (1  3)) (2 (3)) (4 (1 3))))

我有这段代码可以做其他事情,但也许它很有用

(define (decrement-assoc-values alist keys)
  (map (lambda (ass)
         (if (member (car ass) keys)
             (list (car ass) (- (cadr ass) 1))
             ass))
       alist))

(define abc  '((1  3) (2 3) (4  3)))
(define lst '(1 2))

(decrement-assoc-values abc  lst )
Result : '((1 2) (2 2) (4 3))

这将该对的第二个元素递减1,该元素在第二个列表中具有第一个元素

1 个答案:

答案 0 :(得分:0)

这应该这样做。

(define (delete-value abc keys value)
  (map (λ (pair)
         (if(member (car pair) keys)
            (list (car pair)
                  (filter (λ(x)
                             (not(equal? x value))) 
                          (car (cdr pair))))
         pair)) 
    abc))