Я пытаюсь написать простую процедуру в Lisp, чтобы вставить элемент в двоичное дерево поиска.Проблема со списком в Lisp
Я представлял дерево в виде списка:
- первый элемент в дереве является корнем
- второй элемент является левой суб-дерево
- третий элемент является правильным суб- дерево
Это мой код:
(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 '() '())
равны, не так ли?
спасибо, он работает, когда я отбрасываю внутреннюю цитату :) –
Кроме того, 'nil' в Lisp является' '()' в схеме. – erjiang
@erijang: Ах, я думал, что nil и() были одинаковыми, но nil и #f были разными. – Vatine