È stato utile?

Soluzione

Il problema è che ci sono due idee diverse di albero succedendo qui. L'albero è un grafico di come i valori filtrano attraverso la valutazione, ma LISP sta pensando di elenchi di liste, e utilizzando il prefisso notazione:

'(+ (- 1 2) 3) è anche (lista + (lista - 1 2) 3), che è in realtà questo albero:

+  .     3
   - 1 2

(-> zipped down node) ti dà il primo elemento, +, un atomo. (-> zipped down down) ti dà quindi pari a zero, perché il primo elemento, +, è un atomo. (-> zipped down right down node) ti dà il segno meno si vuole, perché questo è il primo elemento del secondo elemento dell'espressione.

Altri suggerimenti

L'albero non è come hai diagrammed esso. Il nodo principale ha 3 figli: +, (- 1 2) e 3. Quando si esegue down dal nodo radice, il valore predefinito è il più a sinistra del bambino, quindi, perché si vede +.

Per raggiungere l'- avresti bisogno di chiamare:

user=> (-> zipped zip/down zip/right zip/down zip/node)
clojure.core/-
scroll top