Lisp ACL2决策树无法执行递归调用

Lisp ACL2决策树无法执行递归调用,lisp,decision-tree,discrete-mathematics,acl2,Lisp,Decision Tree,Discrete Mathematics,Acl2,对于这个问题,我被指派实现一个函数,该函数决定给定数据的决策树的输出。 逻辑是: 如果它是一个符号,那么这就是要输出的值,否则,在内存中查找varname的值,如果它小于或等于阈值,则在左树中查找该值,如果它大于阈值,则在右树中查找该值 决策树是: 符号,例如,“versicolor或[varname阈值左树右树] 这是我已经做过的 (defun decision (tree memory) (if (not (equal (len tree) 0)) (if (not (equ

对于这个问题,我被指派实现一个函数,该函数决定给定数据的决策树的输出。 逻辑是: 如果它是一个符号,那么这就是要输出的值,否则,在内存中查找varname的值,如果它小于或等于阈值,则在左树中查找该值,如果它大于阈值,则在右树中查找该值

决策树是: 符号,例如,“versicolor或[varname阈值左树右树]

这是我已经做过的

(defun decision (tree memory)
  (if (not (equal (len tree) 0))
      (if (not (equal (first tree) (first memory)))
          (decision tree (rest memory))
          (if (<= (second tree) (second memory))
              (decision (third tree) memory)
              (decision (fourth tree) memory)))
      tree))
下面是所用常数的定义

(defconst *IRIS-DECISION-TREE*
  '(petal-length 245/100
    setosa
    (petal-width 175/100
      (petal-length 495/100
        (petal-width 165/100
          versicolor
          virginica)
        (petal-width 155/100
          virginica
          (sepal-length 695/100
            versicolor
            virginica)))
      (petal-length 485/100
        (sepal-length 595/100
          versicolor
          virginica)
        virginica))))
当函数到达递归调用时,我不断收到错误。它表示“ACL2错误(DEFUN决策…):否:提供了度量值 决定的定义。”


我测试了每一条if语句,看看它们是否有效,并多次在我的脑海中运行代码的逻辑,似乎唯一的问题可能是语法错误,但似乎一切正常。

No:measure消息导致;由于您试图通过归纳法证明,因此需要严格的递减度量,但ACL2本身找不到。也许树的长度可以作为衡量标准,但我对它的了解还不够,无法给出一个实际的例子。第二个
if
看起来有点可疑。如果
内存中没有与
(第一棵树)
相等的
元素,递归将在
内存中循环,直到
剩余的
开始返回
nil
,但没有结束条件,因此递归将是无限的。
(defconst *IRIS-DECISION-TREE*
  '(petal-length 245/100
    setosa
    (petal-width 175/100
      (petal-length 495/100
        (petal-width 165/100
          versicolor
          virginica)
        (petal-width 155/100
          virginica
          (sepal-length 695/100
            versicolor
            virginica)))
      (petal-length 485/100
        (sepal-length 595/100
          versicolor
          virginica)
        virginica))))