Вам необходимо указать, что означает список, представляющий ваш график.В настоящее время вы дали только пример списка.
Когда у графа есть синтаксис, такой как:
graph = (node*)
node = (name nextnodename*)
name = SYMBOL
nextnodename = SYMBOL
Тогда функция преобразования может быть:
(defun convert-graph (graph)
(mapcar (lambda (node)
(destructuring-bind (name . nodes) node
(cons name (mapcar #'first nodes))))
graph))
вам могут понадобиться другие функции извлечения:
(defun convert-graph (graph &key (key #'first))
(mapcar (lambda (node)
(destructuring-bind (name . nodes) node
(cons name (mapcar key nodes))))
graph))
Пример:
(convert-graph '((a (b 3) (c 1))
(b (a 3) (d 1))
(c (a 1) (d 2) (e 2)))
:key #'first)
((A B C) (B A D) (C A D E))
Теперь вам может потребоваться удалить дубликаты ссылок.Но это зависит от синтаксиса и семантики описания вашего графа.