尝试访问和删除列表列表

时间:2013-12-27 23:56:54

标签: list scheme racket

我正在尝试访问列表列表的位置,获取值并从另一个列表中删除。

例如,我有一个包含此数据的列表(l1):

(((a1) (a2) (a3)) ((a4) (a5) (a6)))

另一个列表(l2):

 ((a1) (a2) (a3) (a4) (a5) (a6))

现在,我想使用firstlist从第二个列表中删除a1,a2和a3,即。我想从第一个列表中访问a1 a2和a3并从第二个列表中删除它,但是,当我尝试这样做时,结果列表与第二个列表相同。

我的代码是:

(require srfi/1)

(define (delete-from-list l1 l2)
  (let ((laux '()))
       (for/list ([e (in-list l1)])
         (for/list ([i (length e)])
           (set! laux (delete (list-ref e i) l2))
         )
        )
     (values laux)
   )
)

示例列表的结果是:

((a1) (a2) (a3) (a4) (a5) (a6))

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您可能正在寻找类似的东西

#lang racket

(define l1 '(((a1) (a2) (a3)) ((a4) (a5) (a6))))

(define l2 '((a1) (a2) (a3) (a4) (a5) (a6)))

;; a new list without the elements in the first of l1:

(remove* (first l1) l2)

...评估为'((a4) (a5) (a6))

作为旁注,我暗中指引你远离变异。

另外,对我来说,所有项目都是嵌套列表,这有点奇怪。

最后,如果是一个班级,我会有一个完全不同的(一组)答案。