This is a read-only archive of lispforum.com. The forum was locked to new users and posts and is preserved here as static HTML from a database snapshot taken on 2019-09-07.

Tree Traverse

2 posts · 5547 views

Hi , I'm new in LISP.I saw the solution for Binary tree traverse , but I don't understand "FUN" in this problem . Could you please help me ?! :oops:
(defstruct (btnode)
  (val nil)
  (left nil)
  (right nil))

;; naive traversal functions
(defun traverse-pre-order (node fun)
  (if node
      (progn
        (apply fun (list node))
        (if (btnode-left node)
            (traverse-pre-order (btnode-left node) fun))
        (if (btnode-right node)
            (traverse-pre-order (btnode-right node) fun)))))

(defun traverse-in-order (node fun)
  (if node
      (progn
        (if (btnode-left node)
            (traverse-in-order (btnode-left node) fun))
        (apply fun (list node))
        (if (btnode-right node)
            (traverse-in-order (btnode-right node) fun)))))

(defun traverse-post-order (node fun)
  (if node
      (progn
        (if (btnode-left node)
            (traverse-post-order (btnode-left node) fun))
        (if (btnode-right node)
            (traverse-post-order (btnode-right node) fun))
        (apply fun (list node)))))
[edited to put the code in a "
" block -- nuntius]

Re: Tree Traverse

In this code, FUN is a variable that stores a function. FUNCALL or APPLY then call the function with its arguments.

It is common to pass functions as arguments in lisp. It is less common in C/C++ or Java because they do not provide good support for the idea.