2014-10-02 3 views
0

나는 다음과 같은 기능을 가지고에 데프 심판과 상태를 유지 :Clojure의

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

그것은 재귀 함수에 의해 호출된다. 나는 추적 된 움직임을 계속해서 통과 할 수 있기를 원하며, 모두가 @ all-score 내에 존재할 수 있기를 바랍니다. 현재 쓰여지고있는 방식으로, @ all-score는 주어진 마지막으로 추적 된 움직임만을 유지합니다. 어떻게하면 최선의 이동 기능이 호출 될 때마다 수신되는 모든 데이터를 유지할 수 있습니까? 그리고받은 모든 데이터 중 마지막 데이터를 반환하지 않는 것입니까?

답변

2

def을 잘못 사용하고있는 것이 문제입니다. def (및 defn)을 사용하면 네임 스페이스 수준의 var가 만들어집니다. def에 전화하는 것이 중요하지 않습니다. 앞서 지적한대로 all-scores을 계속 재정의하고 있습니다. 짧은 대답은 all-scores의 정의를 최상위 레벨로 끌어 들이기 때문에 끊임없이 호출하지 않습니다. 그런 다음 documentation에 설명 된대로 ref을 업데이트하십시오. 거래를 사용하지 않고 여러 참조를 관리 할 필요가없는 경우 대신 atoms을 사용할 수 있습니다.

+0

감사합니다. 이 문서의 예제는 약간 무겁습니다. 초보자 친화적 인 예를 제공해 줄 수 있습니까? – user3245240