我想用以下方式在 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 的情况,使用 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。