当我的第一个数字低于下一个数字时,我想成为给定列表的子列表。我已经写了一些东西,但是没有用,上面写着“ NIL ist not a real number”,我希望有人能进一步帮助我
(defun order(lst)
(cond ((null lst) nil)
(t (if (< (car lst) (cadr lst))
(cons (car lst) (cadr lst))) (order (rest lst)))))
(print(order '(1 4 5 12 22 34 7 9 0)))
//Output should be this -->((1 4 5) (12 22 34) (7 9) (0))
答案 0 :(得分:3)
由于这看起来像是作业,因此只需要一些提示:
现在,您将只形成一个刚好是两个长的带有cons的新列表。考虑一下您希望递归在必要时扩展这个新列表,还是在“关闭”它之前包含新元素。
找到排序对时,您无需再进行任何递归。您的代码刚刚结束。
如果未对两个比较的元素进行排序,那么您对旧的头什么也不做,只需将其删除即可。总体而言,算法过程中不会生成“外部”列表。
现在cadr可能会进入列表的末尾。因此<将被呼叫一个数字,而nil将导致灾难。