gpt4 book ai didi

duplicates - 如果多个字符在 Scheme 中彼此相邻,则从列表中删除它们

转载 作者:行者123 更新时间:2023-12-03 11:19:07 29 4
gpt4 key购买 nike

我必须制作一个 Dr. Racket 程序,从列表中删除字母,如果它们跟在同一个字母后面的话。例如: (z z f a b b d d) 将变成
(z f a b d)。我已经为此编写了代码,但它所做的只是从列表中删除第一个字母。
任何人都可以帮忙吗?

#lang racket 
(define (remove-duplicates x)
(cond ((null? x)
'())
((member (car x) (cons(car(cdr x)) '())))
(remove-duplicates (cdr x))
(else
(cons (car x) (remove-duplicates (cdr x))))))

(define x '( b c c d d a a))
(remove-duplicates x)

最佳答案

(define (remove-dups x)
(cond
[(empty? x) '()]
[(empty? (cdr x)) (list (car x))]
[(eq? (car x) (cadr x)) (remove-dups (cdr x))]
[else (cons (car x) (remove-dups (cdr x)))]))
(cadr x) (car (cdr x))的缩写万一你不知道。

此外,模式匹配使列表解构通常更具可读性。在这种情况下没有那么多,但它仍然比其他版本好:
(define (rmv-dups x)
(match x
[(list) (list)]
[(list a) (list a)]
[(cons a (cons a b)) (rmv-dups (cdr x))]
[__ (cons (car x) (rmv-dups (cdr x)))]))

关于duplicates - 如果多个字符在 Scheme 中彼此相邻,则从列表中删除它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33052559/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com