List 方案删除相邻的重复项
尝试执行删除相邻重复项的过程。它将一个列表作为输入,并以值的形式返回相同的列表,其中任何重复元素的序列都会缩减为单个元素: 例如:List 方案删除相邻的重复项,list,scheme,List,Scheme,尝试执行删除相邻重复项的过程。它将一个列表作为输入,并以值的形式返回相同的列表,其中任何重复元素的序列都会缩减为单个元素: 例如: (remove-adjacent-duplicates ’(y a b b a d a b b a d o o)) '(y a b a d a b a d o) (remove-adjacent-duplicates ’(yeah yeah yeah)) '(yeah) 如何做到这一点?以下是如何做到这一点: 如果参数为空列表或cdr为空列表,则结果为参数 否则
(remove-adjacent-duplicates ’(y a b b a d a b b a d o o))
'(y a b a d a b a d o)
(remove-adjacent-duplicates ’(yeah yeah yeah))
'(yeah)
如何做到这一点?以下是如何做到这一点:
如果参数为空列表或cdr
为空列表,则结果为参数
否则,如果第一个和第二个元素相同,则跳过第一个元素
Elsecons
带递归的第一个元素以及cdr
或参数。。例如
(remove-adjacent-duplicates '(a b)) ; ==
(cons (car '(a b)) (remove-adjacent-duplicates (cdr '(a b))))
这里有一个解决方案-首先,我们检查列表是否为空,如果不是-按块检查重复项
(define (strip-duplicates ls)
(if (null? ls)
'()
(let ((first (car ls)))
(let loop ((known first)
(rest (cdr ls))
(so-far (list first)))
(if (null? rest)
(reverse so-far)
(let ((first-remaining (car rest)))
(loop first-remaining
(cdr rest)
(if (equal? known first-remaining)
so-far
(cons first-remaining so-far)))))))))
您尝试了什么?仅代码的答案可能会自动标记为低质量。