3

Dr.Schemeでグラフを次のように表現したいと思います。

各ノードについて、その値と隣接ノードのリストを保存したいのですが、私が苦労している問題は、隣接ノードを他のノードへの参照として保存したいということです。

例:ノードnyを(„ NY“(lp))として格納します。ここで、lとpは隣接するノードであり、(„ NY“(„ London“„ Paris“))ではありません。

4

1 に答える 1

3

答えは、サイクルが必要かどうかによって異なります。サイクルを処理すると、事態が複雑になる可能性があります。しかし、リストだけで表現したいのなら、それ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または、リスト内で都市が出現するたびにラップすることもできます。

于 2010-05-03T22:37:54.313 に答える