1

这真是令人费解......

假设我们有 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

4

1 回答 1

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))
于 2013-11-14T04:44:50.390 回答