【发布时间】:2012-05-13 16:38:11
【问题描述】:
我对 Scheme 还很陌生,我在写一个函数作为家庭作业的一部分时遇到了麻烦。我有一个图表 G 以列表形式提供给我,格式如下:((node1 node2 weight1) (node3 node4 weight2) ...)。我正在尝试编写一个函数,以这种格式返回此图中所有节点(V)的列表:(node1 node2 node3 ...)。该函数只能将图形(G)作为输入。
所以我认为我可以通过将 G 中每个嵌套列表的第一个和第二个元素添加到 V 来递归地执行此操作。这是我所写的:
(define nodes-of
(lambda (G)
(if (null? G)
()
(begin (add-to-set (cadar G) (nodes-of (cdr G)))
(add-to-set (caar G) (nodes-of (cdr G))))))
我认为这是错误的,因为第一个递归只涉及 (cadar G) 而第二个涉及 (caar G),返回值将仅由 begin 下的第二个语句设置(如果我没记错的话)。
add-to-set 是我之前为家庭作业编写的一个函数,如果列表中不存在一个元素,它会将其添加到列表中。 (例如:add-to-set n S ,这会将 n 添加到 S)
谁能帮我解决这个问题? (顺便说一句,我不允许使用多个 let's、let* 或 set)
【问题讨论】:
标签: list graph scheme nested-lists