Ответ зависит от того, хотите ли вы циклы или нет - работа с ними может усложнить ситуацию.
Но если вы хотите сделать представление только со списками, то shared
ваш друг. Например:
(shared ([NY (list "NY" (list London Paris))]
[Paris (list "Paris" (list NY))]
[London (list "London" (list NY))])
(list NY Paris London))
Если ваша цель на самом деле написать «реальный» код, тогда использование ваших собственных структур будет намного лучше, чем списков (но тогда shared
не будет работать).
В случае использования обещаний, циклы становятся проще сделать с помощью 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
вокруг каждого вхождения города в списках.