2014-05-15 8 views
1

Common Lisp의 속성 목록을 사용하여 이진 트리를 몇 가지 추가 정보로 나타냅니다. 단일 함수를 사용하여 임의로 트리를 파고 적절하게 수정할 수 있기를 바랍니다.Clojure의 pll에 대한 get-in 및 assoc-in과 유사한 작업

내가 사용하는 다른 Lisp 인 Clojure에는 정확하게 이것을 할 수있는 get-inassoc-in이라는 기능이 있지만 Common Lisp에서 비슷한 것을 찾지 못했습니다. 그들은 실제로 존재 하는가, 아니면 나는 그것을 쓰어야 할 것인가?

+1

우리가 Clojure에 익숙하지 않은 분들을 위해, 이러한 기능이 어떻게 사용되는지 보여줄 수 있습니까? 이상적인 Common Lisp 대응 물체는 어떻게 생겼을까요? 그들은 열쇠 또는 ​​무엇의 명부를 가지고 가느냐? –

+0

@ JoshuaTaylor : 다음과 같이 plist''* pl *''을 가지고 있다고 가정 해 봅시다 :''(: a 1 : b (: a 2 : b 3))''. 그런 다음''(get-in * pl * '(: b : a))''는''2' '와''(assoc-in * pl *'(: b : a) 5)'' '(: a 1 : b (: a 5 : b 3))''를 반환합니다. –

+2

@ MrSinister13 : 질문을 편집하여 추가 정보를 추가 할 수 있습니까? –

답변

2

아직 이러한 데이터 구조에 중첩 된 plist를 사용하지는 않았습니다. 다소 특이한 경우 일 수 있습니다. 오히려 노드를 나타내는 구조 (defstruct으로 정의) 또는 클래스 (defclass으로 정의)를 기대하고 싶습니다. (너무 희소하지 않은) 이진 트리의 경우에 대한 대안은 루트 노드가 인덱스 0에 있고 각 노드의 자식이 (2 & middot; i + 1) 및 (2 & middot; i + 2) .

plists 사용을 주장하는 경우 getf을 중첩하고 중첩 된 getfsetf 확장기를 써야합니다.