我想以下列方式在Dr.博士中代表一个图表:
对于我想要存储它的值和相邻节点列表的每个节点,我遇到的问题是我希望将相邻节点存储为对其他节点的引用。
例如:我希望节点ny存储为(“NY”(l p))其中l和p是相邻节点,并且 不是(“纽约”(“伦敦”“巴黎”))。
答案 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
。