我对 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)