Для этой задачи мне поручено реализовать функцию, которая решает вывод дерева решений с учетом данных.Логика: если это символ, то это значение для вывода в противном случае, ищите значение 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 в (DEFUN DECISION ...): Нет: MEASURE было предоставлено с определением DECISION.»
Я проверил каждое выражение if, чтобы убедиться, что оно работает, и запустил логику кодав моей голове несколько раз, и, похоже, единственной проблемой, с которой я мог столкнуться, может быть ошибка в синтаксисе, но все кажется правильным.