2011-10-03 1 views
2

내지도에서 지퍼를 만들려고합니다. 지퍼 정의에 따르면,지퍼 라이브러리의 make-node

Usage: (zipper branch? children make-node root) 

매개 변수 분기는? 아이들은 분명하고 나는 그것을 정의 할 수 있습니다. 그러나 make-node 기능은 혼란 스럽습니다. 내가 사용하고 있다고 생각하지 않는 구현을했다.

는 나는이지도에서 지퍼를 구축 할

{:question "Question 1" :yes "Answer1" 
         :no {:question "Question 2" 
          :yes "Answer2" 
          :no "Answer3"}} 

의지도를 가지고있다. 그래서 다음과 같은 지퍼 함수 호출을 사용했습니다.

(zip/zipper map? 
    (fn [node] [(:yes node) (:no node)]) 
    (fn [node children] (:question node)) 
    question-bank) 

이 작동합니다. make-node 매개 변수에 nil을 지정해도 작동합니다. 나는이 매개 변수가 언제 어디서 사용되는지 이해하지 못한다.

답변

2

지퍼를 사용하면 트리를 수정할 수있을뿐만 아니라 트리를 수정할 수 있습니다. 트리에 새 노드를 추가하거나 기존 노드를 수정하려고하면 make-node 함수가 호출됩니다. 당신의 지퍼가 전혀 :question 요소를 노출하지 않습니다,하지만 나는 당신의 지퍼를 작성할 수 있기 때문에 조금 이상해 : 나는 많은 개인적으로 지퍼를 사용하지 않는

(zip/zipper map? (juxt :yes :no) 
       (fn [_ [yes no]] {:yes yes :no no}) 
       root) 

, 그래서 이것은 아마 올바른 구현 아니다; 난 단지 make-node 함수가 지퍼에 부착 할 새 노드를 만드는 데 사용된다고 설명하기를 바랄뿐입니다.