对于这个问题,我被分配去实现一个函数,该函数在给定数据的情况下决定决策树的输出。 逻辑: 如果是符号,则为要输出的值,否则,在内存中查找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语句,看它们是否有效,并多次运行代码逻辑,似乎我可能唯一的问题可能是语法错误,但这似乎是正确的。