【发布时间】:2018-11-06 04:24:57
【问题描述】:
我的任务是编写一个方案函数,该函数可以生成一个新列表,其中包含仅存在于两个输入列表之一中的元素。 我设法创建了一个可行的解决方案:
(define remove
(lambda (l item)
(filter (lambda (x) (not (equal? x item))) l)))
(define uncommon_list
(lambda (list1 list2)
(cond
((null? list2) list1)
((null? list1) list2)
((memv (car list1) list2)
(uncommon_list (cdr list1) (remove list2 (car list1))))
(else
(append (list (car list1)) (uncommon_list (cdr list1) list2))))))
但是我觉得我把这个复杂化了,而且 O 复杂度不是很好?任何使这一点变得更好的指针都会很棒!谢谢
【问题讨论】:
-
((memv (car list1) list2) (uncommon_list (cdr list1) (remove list2 (car list1))))也是错误的 - 考虑在list1中有重复的(car list1)(假设(remove xs x)会从xs中删除所有出现的x)。另外,你计算 A \ B,但symmetric difference 也应该包括 B \ A。 -
@WillNess 感谢您向我发送链接!实际上知道这个问题的正确术语非常有用,我想出了一个希望更好的解决方案,你能看看吗?
标签: list functional-programming set scheme boolean-operations