Я довольно новичок в 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))))))
Я думаю, что это не так, хотя, как первая рекурсия включает только (кадар G), а вторая включает (caar G), а возвращаемое значение будет установлено только вторым оператором при начале (если я не ошибаюсь).
add-to-set - это функция, которую я написал ранее для домашней работы, она добавляет элемент в список, если он еще не существует в списке. (например: add-to-set n S, это добавит n к S)
Может ли кто-нибудь помочь мне с этим? (btw Мне не разрешено использовать несколько let's, let * or set)
отличный ответ, спасибо! – bleyzn
@bleyzn Happy to help – oobivat