我写了这段代码来删除重复,这是有效的。但是,当我为相同功能添加选项时,存在问题。我能做什么?? 谢谢!!
(define (remove-dups ls eq)
(if (null? ls) '()
(cons (car ls) (remove-dups (deepRemove (car ls) (cdr ls) eq)))))
(define (deepRemove n L eq)
(if (null? L) '()
(if (list? (car L))
(cons (deepRemove n (car L) eq) (deepRemove n (cdr L) eq))
(if (eq? n (car L))(deepRemove n (cdr L) eq)
(cons (car L)(deepRemove n (cdr L) eq))))))
答案 0 :(得分:2)
您的代码至少有两个错误。首先,您将错误数量的参数传递给remove-dups
。其次,您实际上并未使用eq
中的deepRemove
参数。此外,您应该使用cond
而不是嵌套if
,但这更像是一种风格问题。试试这个:
(define (remove-dups ls eq)
(if (null? ls)
'()
(cons (car ls)
(remove-dups (deepRemove (car ls) (cdr ls) eq) eq)))) ; fixed
(define (deepRemove n L eq)
(if (null? L)
'()
(if (list? (car L))
(cons (deepRemove n (car L) eq)
(deepRemove n (cdr L) eq))
(if (eq n (car L)) ; fixed
(deepRemove n (cdr L) eq)
(cons (car L)
(deepRemove n (cdr L) eq))))))
只要您通过适当的eq
程序并考虑到需要比较的所有可能值,上述操作就会起作用,请注意这一点。