私はSchemeにかなり慣れておらず、宿題の一部として関数を書くのに苦労しています。次の形式のリストとしてグラフGが提供されています:((node1 node2 weight1)(node3 node4 weight2)...)。このグラフのすべてのノード(V)のリストを次の形式で返す関数を作成しようとしています:(node1 node2 node3 ...)。この関数は、グラフ(G)のみを入力として受け取ることができます。
したがって、G内のネストされた各リストの最初と2番目の要素を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)のみが含まれ、2番目の再帰には(caar G)が含まれ、戻り値はbeginの下の2番目のステートメントによってのみ設定されます(私が間違っていない場合)。
add-to-setは、宿題のために以前に作成した関数です。リストに要素がまだ存在しない場合は、リストに要素を追加します。(例:add-to-set n S、これによりnがSに追加されます)
誰かがこれを手伝ってくれますか?(ところで、複数のlet's、let *、またはsetを使用することは許可されていません)