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

时间:2019-05-15 20:04:23

标签: lisp decision-tree discrete-mathematics acl2

对于这个问题,我被分配去实现一个函数,该函数在给定数据的情况下决定决策树的输出。 逻辑: 如果是符号,则为要输出的值,否则,在内存中查找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))

这里是一个单元测试:

(check-expect (decision *IRIS-DECISION-TREE* 
                        (search-list-to-tree '((petal-length 2) 
                                               (petal-width 2)
                                               (sepal-length 5)))) 
              'setosa)

这是所用常量的定义

(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 Error in(DEFUN DECISION ...):No:MEASURE随附 DECISION的定义。”

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

0 个答案:

没有答案