方案:删除子列表

时间:2011-11-09 13:36:23

标签: scheme racket

我没有运气创建删除子列表的功能。

我有这个清单:

'((("a" "c") ("a" "l")) (("b" "c") ("b" "l")) (("c" "hmm")))

这应该是结果:

'(("a" "c") ("a" "l") ("b" "c") ("b" "l") ("c" "hmm"))

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用两个函数展平(在网上找到)和createPairs。

第一个函数将列表展平为1级深度列表,如下所示:

'("a" "c" "a" "l" "b" "c" "b" "l" "c" "hmm")

第二个函数createPairs按对象加入列表:

'(("a" "c") ("a" "l") ("b" "c") ("b" "l") ("c" "hmm"))

以下是使用过的功能:

拼合:

 (define (flatten list)
   (cond ((null? list) '())
         ((list? (car list)) (append (flatten (car list)) (flatten (cdr list))))
         (else
          (cons (car list) (flatten (cdr list))))))

CreatePairs:

(define (createPairs a)
  (cond ((null? a) '()) 
        (else 
         (cons (list (car a) (car (cdr a)))
               (createPairs (cdr (cdr a)))))))
相关问题