Como escrever uma função esquema que leva duas listas e retorna quatro listas
Pergunta
Eu tenho 2 listas de elementos '(a b c) (d b f) e quer encontrar diferenças, união e intersecção em um resultado. Isso é possível? Como?
Eu escrevi uma função membro que verifica se há um carro da primeira lista na segunda lista, mas não posso jogar um membro para a nova lista.
(define (checkResult lis1 lis2)
(cond...........
))
(checkresult '( a b c) '(d b f))
O meu resultado deve ser (( a c) (d f) (a b c d f) (b))
.
Solução
Como já foi dito, tudo o que você precisa fazer é criar funções separadas para calcular a interseção, união e subtração dos dois conjuntos, e chamá-los a partir checkResult:
(define (checkresult a b)
(list (subtract a b)
(subtract b a)
(union a b)
(intersect a b)))
Aqui estão alguns exemplo de união, interseção, e funções de subtração:
(define (element? x lst)
(cond ((null? lst) #f)
((eq? x (car lst)) #t)
(#t (element? x (cdr lst)))))
(define (union a b)
(cond ((null? b) a)
((element? (car b) a)
(union a (cdr b)))
(#t (union (cons (car b) a) (cdr b)))))
(define (intersect a b)
(if (null? a) '()
(let ((included (element? (car a) b)))
(if (null? (cdr a))
(if included a '())
(if included
(cons (car a) (intersect (cdr a) b))
(intersect (cdr a) b))))))
(define (subtract a b)
(cond ((null? a) '())
((element? (car a) b)
(subtract (cdr a) b))
(#t (cons (car a) (subtract (cdr a) b)))))
Nota: uma vez que estes são conjuntos e ordem não importa, os resultados não são ordenados. Além disso, as funções assumem que as entradas são conjuntos, e, portanto, não fazer qualquer verificação duplicada para além do que é exigido para a união.
Outras dicas
Claro que é possível. Supondo que você tenha função para calcular as diferenças, interseção união etc:
(define (checkResult lis1 list2)
(list (difference lis1 lis2)
(union ...
Claro que é possível. Aqui estão algumas dicas:
- o que é o resultado da combinação de uma lista e uma lista vazia?
- Você não tem que fazer tudo de uma vez. Pegue um pedaço de cada vez.
No topo do Charlie Martin e tomjen respostas, eu vim com essa fonte:
A implementação das funções distintas podem ser encontrados com explicações agradáveis.