Я пытаюсь написать простую процедуру на Лиспе для вставки элемента в двоичное дерево поиска.
Я представлял дерево в виде списка:
- первый элемент вдерево - это корень
- второй элемент - это левое поддерево
- третий элемент - это правое поддерево
Это мой код:
(define Insert
(lambda (x T)
(if (null? T)
(list x '() '())
(if (> x (car T))
(list (car T)
(cadr T)
(Insert x (list (caddr T))))
(list (car T)
(Insert x (cadr T))
(list (caddr T)))))))
Когда я вызываю процедуру следующим образом: (Insert 2 '(4 '(2 '() '() ) '()))
, у меня возникает проблема с ">", потому что второй аргумент не является действительным числом, но я не знаю почему.
Исключение:
>: expects type <real number> as 2nd argument, given: quote; other arguments were: 2
Однако, когда я вызываю процедуру следующим образом: (Insert 2 ( list 4 (list 2 '() '() ) '()))
, она успешно работает.
Почему?
Я знаю, что '(1 '() '())
и (list 1 '() '())
равны, не так ли?