我有这个代码:
(define tree `(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)))])]))
(delete `() (sub graph))))
(define delete
(lambda (x y)
(if (null? y )
`()
(if (eqv? (car y) x)
(delete x (cdr y))
(cons (car y) (delete x (cdr y)))))))
它打印一个连接图,其中所有节点都出现一次。
跑步(prog1 tree)
印刷:(A (B (C)) (D (E)))
我已经查看了 lisp 中的各种深度优先搜索(类似于我正在尝试做的事情),它们似乎对此更加优雅,有些使用迭代方法。我知道该程序效率不高(在大树上运行速度很慢)所以我将如何提高这段代码的效率?
谢谢,詹姆斯