【发布时间】:2017-02-27 03:22:54
【问题描述】:
我正在做一项作业,以遍历 DAG,寻找最短的路线。在一些 SO 答案的帮助下,我准备了很多东西。话虽如此,我无法获得一个返回子列表列表的函数,就像我需要进一步处理数据一样。数据文件有一个子列表列表,格式为(node1 node2 weight)
(define (children? node)
(define list '(1))
(map (lambda (x)
(cond
((equal? (car x) node)
(if (equal? list '(1))
(set-car! list x)
(append! list x)))))
data)
(if (equal? list '(1))
#f
list))
(define (append! lst . lsts)
(if (not (null? lsts))
(if (null? (cdr lst))
(begin
(set-cdr! lst (car lsts))
(apply append! (car lsts) (cdr lsts)))
(apply append! (cdr lst) lsts))))
当我运行 (children?'b3) 时,我得到如下结果:
((b3 b5 57) b3 b4 81 b3 b10 55 b3 b14 61 b3 b13 66)
它实际上应该是什么样子
((b3 b5 57) (b3 b4 81) (b3 b10 55) (b3 b14 61) (b3 b13 66))
任何人都可以在这里阐明我的问题吗?
提前感谢您的帮助。
【问题讨论】:
-
你的缩进全错了,如果没有必要,你不应该使用破坏性的列表修改,并且应该提供一个
data实际样子的例子。话虽如此,您可能在应该使用list或cons的地方使用append。