Агенты, вызывающие агентов - PullRequest
2 голосов
/ 10 ноября 2011

Я пытаюсь понять, что происходит, когда агенты вызывают агентов.

(def top (agent 0))
(def bottom (agent 1))

У меня есть минимальная пара:

(defn testA []
  "This returns 'top', whose value is 'bottom', whose value is 2."
  (send top (fn [top-value]
          (send bottom inc)))
  (await top)
  top)

(defn testB []
  "This never terminates."
  (send top (fn [top-value]
          (send bottom inc)
          (await bottom) ;;<- this is new
          bottom))
  (await top)
  top)

Что происходит с внутренним ожиданием? Какие факторы вступают в игру, когда один агент вызывает другого?

Спасибо

1 Ответ

2 голосов
/ 11 ноября 2011

Краткий ответ: вы не можете использовать await в действии агента. Вы можете увидеть ошибку (если вы прервались из текущего ожидания) с (agent-error top)

Для более длинного ответа (объясняющего, почему вы не можете этого сделать), вам придется (а) подождать какого-нибудь Clojure Guru :) Я считаю, что вы можете ввести тупики или какую-то другую катастрофу.

Также обратите внимание, что использование top или bottom возвращает сам агент, а не его значение. Чтобы получить значение, вам нужно (deref top) или @top для краткости.

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