Я пытаюсь построить двоичное дерево lisp. Функция должна сделать этотПостроение двоичного дерева в lisp
(buildBST ‘(6 9 2 1 7)) -> (6 (2 (1)()) (9 (7)()))
код, который мы имеем до сих пор будет постоянно возвращаться ошибка
> 7 nil arguments should be of type real
Вот наш код
(defun buildBst (lis)
(cond
((null lis) 0)
((atom lis) lis)
(t (if (>(car lis)(car(cdr lis)))
(buildBst(cdr lis))
(buildBst(cdr lis))))))
Вы не проверяете случай, когда 'lis' имеет только 1 элемент. Вы делаете '(> (car lis) (car (cdr lis))', но если есть только один элемент, '(car (cdr lis))' будет 'NIL'. – Barmar
Обе альтернативы вашего оператора' if' do точно так же, что вы там? –
Вы, кажется, не комбинируете рекурсивный вызов с тем, что у вас уже есть. Таким образом, конечный результат не будет деревом, он будет просто результатом внутренняя рекурсия. – Barmar