【发布时间】:2014-05-29 08:06:54
【问题描述】:
我是 LISP 的新手。我正在尝试在 LISP 中编写冒泡排序函数。
这是我到目前为止所做的。
(defun mysort (x)
(if (null x) x
(if (< (car x) (cadr x))
(cons (car x) (mysort (cdr l)))
(cons (cadr x) (mysort (cons (car x) (cddr x)))))))
我遇到了一个错误
NIL is not a real number
当我修改代码时(参考了几个代码后)-
(defun mysort (x)
(if (null (cdr x)) x
(if (< (car x) (cadr x))
(cons (car x) (mysort (cdr l)))
(cons (cadr x) (mysort (cons (car x) (cddr x)))))))
现在可以正常使用了。
为什么要替换 (如果 (null x) x...) 和 (如果 (null (cdr x)) x...) 有所作为?
另外,我从另一个函数调用 mysort 来运行它(长度 x)次数。是否有可能在一个递归循环中,只使用基本函数就可以实现完整的排序?
【问题讨论】:
-
在工作/失败情况下
(cdr x)是什么?这与使用/返回的x有何关系?想象一下,当 x 是'(a)/(cons 'a nil)与'()/nil时。 -
哦,现在知道了。感谢您的帮助。
标签: lisp common-lisp