Scheme博士中的图形表示

时间:2010-05-03 21:12:51

标签: scheme racket

我想以下列方式在Dr.博士中代表一个图表:

对于我想要存储它的值和相邻节点列表的每个节点,我遇到的问题是我希望将相邻节点存储为对其他节点的引用。

例如:我希望节点ny存储为(“NY”(l p))其中l和p是相邻节点,并且 不是(“纽约”(“伦敦”“巴黎”))。

1 个答案:

答案 0 :(得分:3)

答案取决于你是否想要循环 - 处理它们会使事情复杂化。 但是,如果您只想使用列表进行表示,那么shared就是您的朋友。例如:

(shared ([NY     (list "NY"     (list London Paris))]
         [Paris  (list "Paris"  (list NY))]
         [London (list "London" (list NY))])
  (list NY Paris London))

如果您的目标是实际编写“真实”代码,那么使用您自己的结构将比列表好得多(但shared不起作用)。

对于使用promises的情况,仅使用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