繁体   English   中英

复制方案列表中的给定元素

[英]Replicate A Given Element in a List in Scheme

所以我正在编写一个方案函数,该函数接受一个元素和一个列表,并返回带有复制元素的列表,即(replicate 'd '(abc 1 d))应该返回'(abc 1 dd))

但是,只要元素不属于列表,则返回的只是原始列表,如果元素不属于列表,则返回的只是列表。 我是新手,无法找到我的错误所在。 非常感谢您的帮助!

(define (replicate elmt set)
 (cond((null? set) '())
     ((member? elmt set)(replicate_helper elmt set))
     (else set)))

(define (replicate_helper elmt set)
    (cond (eq? (car set) elmt) (cons elmt set)
        (else (cons (car set)
                (replicate_helper elmt (cdr set))))))

也是会员吗? 是我的函数,当元素在列表中时返回#t,当元素不在列表中时返回#f。 看起来是这样的:

(define (member? elmt set)
 (cond ((null? set) #f)
    ((eq? elmt (car set)) #t)
    (else(member? elmt (cdr set)))))

这是一个简单的错误:一对夫妇括号中的第一个条件是失踪replicate_helper 只需用以下一种替换您的实现:

(define (replicate_helper elmt set)
  (cond ((eq? (car set) elmt) (cons elmt set))
        (else (cons (car set)
                    (replicate_helper elmt (cdr set))))))

它应该可以按预期工作:

(replicate 'd '(a b c 1 d))
=> '(a b c 1 d d)

(replicate 'x '(a b c 1 d))
=> '(a b c 1 d)

作为改进,我建议您替换eq? equal? replicate_helpermember? ,请参阅这篇文章以了解原因。

但是,等等,我们可以走得更远:我们不需要三个过程来解决这个问题,如果我们对基本情况谨慎的话,一个过程就足够了-这就是我的意思:

(define (replicate elmt set)
  (cond ((null? set) '())
        ((equal? (car set) elmt) (cons elmt set))
        (else (cons (car set)
                    (replicate elmt (cdr set))))))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM