3
我有這樣的代碼:如何確保空列表未打印(方案)?
(define graph `(A (B (C)) (D (E)) (C (E))))
(define (prog1 graph)
(let ([seen `()])
(define (sub g)
(cond
[(member (car g) seen) `()]
[else
(set! seen (cons (car g) seen))
(cond
[(null? (cdr g)) (list (car g))]
[else
(cons (car g) (map sub (cdr g)))])]))
(sub graph)))
它打印,所有的節點出現一次的連通圖。但是,如果已經訪問了一個節點,我將返回空列表`()
。這將導致與輸出一個問題,我不知道如何解決它:
當運行(prog1 graph)
的電流輸出爲:(A (B (C)) (D (E))())
但是,我想輸出是(A (B (C)) (D (E)))
任何暗示關於如何修改代碼來實現這一點會很好。
''()'出現在輸出中,因爲你混合了'cons'和'map'。考慮'(sub(A A A))'發生了什麼。還有什麼應該發生在'(sub(A(A(B))))??你的代碼被寫入輸出的方式可能只是'(A)'。 –