Я новичок в lisp
и пытаюсь написать рекурсивную функцию, которая возвращает минимальное число из списка.Он также хочет обнаружить атом.Следующий код возвращает ошибку:
(defun minFromList (l)
(cond ((null l) nil) ; Causes error shown below
; (cond ((null l) ) ; Causes the same error
; (cond ((null l) 0) ; It causes always 0 to be the final return val.
((numberp l) l)
((numberp (car l)) (min (car l) (minFromList(cdr l))))
((listp (car l)) (min (minFromList (car l)) (minFromList (cdr l))))
(t nil) ; if all condition doesn't hold just return nil.
)
)
Ошибка:
*** - MIN: NIL is not a real number
Очевидно, проблема заключается в том, где он возвращает nil / 0, когда заданный список равен нулю.Какие возможные обходные пути?Спасибо.
Среда) Ubuntu 11.10, clisp 2.49
Обновление) Хотя я уже подобрал этот в качестве ответа, я приветствую, если есть другие способыособенно без создания новых функций, если таковые имеются.
Вот самый простой код, который я сделал, вдохновленный выбранным ответом.
(defun minNum (a b)
(cond ((null a) b)
((null b) a)
(t (min a b)))
)