Графическое представление в Dr Scheme - PullRequest
3 голосов
/ 04 мая 2010

Я хочу представить график в Dr. Scheme следующим образом:

Для каждого узла, в котором я хочу сохранить его значение и список смежных узлов, проблема, с которой у меня возникают трудности, заключается в том, что я хочу, чтобы соседние узлы были сохранены как ссылки на другие узлы.

Например: я хочу, чтобы узел ny был сохранен как («NY» (l p)), где l и p - смежные узлы, и не как („NY“ („London“ „Paris“)).

1 Ответ

3 голосов
/ 04 мая 2010

Ответ зависит от того, хотите ли вы циклы или нет - работа с ними может усложнить ситуацию. Но если вы хотите сделать представление только со списками, то 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 вокруг каждого вхождения города в списках.

...