2014-10-02 4 views
0

Я следующая функция:Поддержание государства с четкостью иой в Clojure

(defn best-move [tracked-moves] 
    (def all-scores (ref tracked-moves)) 
    @all-scores) 

Его называют рекурсивной функцией. Я хочу иметь возможность продолжать прохождение в отслеживаемых ходах, и для них всех существует в пределах @ все оценки. То, как это написано прямо сейчас, @ all-scores будет удерживаться только на последних отслеживаемых ходах, которые ему заданы. Как я могу заставить его удерживать все данные, которые он получает каждый раз, когда вызывается функция лучшего перемещения? И не просто вернуть последнюю из всех данных, которые она получает?

ответ

2

Проблема в том, что вы используете def неправильно. Любое использование defdefn) создаст переменную уровня пространства имен. Неважно, где вы звоните def. Как вы уже указали, вы постоянно пересматриваете all-scores. Короткий ответ - вывести свое определение all-scores на верхний уровень, так что вы не постоянно его вызываете. Затем обновите ref, как описано в documentation. Если вы не используете транзакции и не нуждаетесь в управлении несколькими ссылками, вы можете вместо этого использовать atoms.

+0

Спасибо! Пример в документации немного тяжелый; не могли бы вы представить пример для новичков? – user3245240

Смежные вопросы