Thursday, 15 August 2013

emacs - why the change is in place for the list with elisp? -



emacs - why the change is in place for the list with elisp? -

i have question elisp. example:

(setq trees '(maple oak pine birch)) -> (maple oak pine birch) (setcdr (nthcdr 2 trees) nil) -> nil trees -> (maple oak pine)

i thought (nthcdr 2 trees) returns new list - (pine birch) , set list setcdr expression, should not alter value of trees. explain me?

if read documentation string nthcdr, you'll see returns pointer "nth" "cdr" - pointer original list. you're modifying original list.

doc string:

take cdr n times on list, homecoming result.

edit wow, "pointer" seems stir confusion. yes, lisp has pointers.

just @ box diagrams used explain list construction in lisp (here's emacs's documentation on thing):

--- --- --- --- --- --- | | |--> | | |--> | | |--> nil --- --- --- --- --- --- | | | | | | --> rose --> violet --> buttercup

look @ arrows, they're .... pointing things. when take cdr of list, 2nd box refers (aka "points" to), atom, string, or cons cell. heck, check out on wikipedia's entry car , cdr.

if feels improve phone call reference, utilize terminology.

cdr not homecoming copy of refers to, confusing rnaer.

list emacs elisp cdr

No comments:

Post a Comment