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 的情况,使用 just 就很容易实现循环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在列表中每次出现的城市周围环绕 a。

于 2010-05-03T22:37:54.313 回答