函数中的代码未被执行

Code in a function not being executed

我是 Lisp 的新手,所以请放轻松。我试图将二叉搜索树实现到数组中并能够按顺序输出它。 我有这个数组,其中索引 1 是根,2*i 是左边 child,2*i + 1 是右边 child:

#(NIL 30 15 50 10 20 NIL 70 3 NIL 17 NIL NIL NIL NIL 80 NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL
  NIL NIL NIL)

我将它发送到此函数以从树中提取顺序输出:

(defun inOrder (tree rootIndex)
  (setq leftI (* rootIndex 2))
  (setq rightI (+ leftI 1))
  (if (aref tree leftI)
      (inOrder tree leftI))
  (format t "~D," (aref tree rootIndex))
  (if (aref tree rightI)
      (inOrder tree rightI)))

预期的输出应该是 3,10,15,17,20,30,50,70,80,但我得到了 3,10,15,30。 格式后的代码似乎没有被执行。如果有人能帮助我,将不胜感激。

您正在使用 leftIrightI 作为绝对变量,因此递归无法按预期工作。相反,将它们定义为带有 let* :

的局部变量
 (defun inOrder (tree rootIndex)
   (let* ((leftI (* rootIndex 2))
          (rightI (+ leftI 1)))
     (if (aref tree leftI) 
         (inOrder tree leftI))
     (format t "~D," (aref tree rootIndex))
     (if (aref tree rightI)
         (inOrder tree rightI))))