簡體   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