Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 方案删除相邻的重复项_List_Scheme - Fatal编程技术网

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
为空列表,则结果为参数

否则,如果第一个和第二个元素相同,则跳过第一个元素

Else
cons
带递归的第一个元素以及
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)))))))))

您尝试了什么?仅代码的答案可能会自动标记为低质量。