Dr.Schemeでグラフを次のように表現したいと思います。
各ノードについて、その値と隣接ノードのリストを保存したいのですが、私が苦労している問題は、隣接ノードを他のノードへの参照として保存したいということです。
例:ノードnyを(„ NY“(lp))として格納します。ここで、lとpは隣接するノードであり、(„ NY“(„ London“„ Paris“))ではありません。
答えは、サイクルが必要かどうかによって異なります。サイクルを処理すると、事態が複雑になる可能性があります。しかし、リストだけで表現したいのなら、それshared
はあなたの友達です。例えば:
(shared ([NY (list "NY" (list London Paris))]
[Paris (list "Paris" (list NY))]
[London (list "London" (list NY))])
(list NY Paris London))
あなたの目標が実際に「実際の」コードを書くことであるなら、あなた自身の構造体を使うことはリストよりはるかに良いでしょう(しかしそれではうまくいきshared
ません)。
promiseを使用する場合、サイクルは。だけで簡単に実行できるようになりますletrec
。この場合、上記は次のようになります。
(letrec ([NY (list "NY" (delay (list London Paris)))]
[Paris (list "Paris" (delay (list NY)))]
[London (list "London" (delay (list NY)))])
(list NY Paris London))
delay
または、リスト内で都市が出現するたびにラップすることもできます。