LISP编程 (解除气泡(n) (续) ((空n)无) ((空(cdr n))n) ((>(汽车n)(汽车cdr n))) (附加(列表(car(cdr n))) (布布卢普(cons(car n))(cdr(cdr n(()))) (t)(附加(列表(车辆n))(bubbleUp(cdr n‘‘‘‘‘‘‘)’)

LISP编程 (解除气泡(n) (续) ((空n)无) ((空(cdr n))n) ((>(汽车n)(汽车cdr n))) (附加(列表(car(cdr n))) (布布卢普(cons(car n))(cdr(cdr n(()))) (t)(附加(列表(车辆n))(bubbleUp(cdr n‘‘‘‘‘‘‘)’),lisp,common-lisp,Lisp,Common Lisp,我想写一个使用这个bubbleUp函数的排序函数 调用sort将输出以下内容: >(排序’(54321))>(12345) >(排序(64398)) > (3 4 6 8 9) 但我只想使用LISP函数:defun、cond、car、cdr、list、cons、append、>、=、,据我所知,您必须再次应用冒泡(这是一种更简洁的函数命名方式),直到(应用#' (1 3 4 6 8 9 10 12) 但是请注意,我不是一个非常有经验的Lisp程序员,而且这段代码非常低效。如果您真的想对列表进

我想写一个使用这个bubbleUp函数的排序函数

调用sort将输出以下内容:

>(排序’(54321))>(12345)
>(排序(64398))
> (3 4 6 8 9)

但我只想使用LISP函数:defun、cond、car、cdr、list、cons、append、>、=、,据我所知,您必须再次应用
冒泡
(这是一种更简洁的函数命名方式),直到
(应用#'<排序列表)
为真,其中
排序列表
冒泡的结果

当然,这只是一个家庭作业解决方案,如果性能可能成为一个问题,就不应该使用它。此外,你应该考虑这样做是否明智;-)

我想,最简单的模式应该是这样的(按照给定的函数气泡):

(取消气泡排序(列表)
(条件((应用#’(气泡排序(6 4 3 9 8 10 1 12))
==> (1 3 4 6 8 9 10 12)

但是请注意,我不是一个非常有经验的Lisp程序员,而且这段代码非常低效。如果您真的想对列表进行排序,您应该使用sort并阅读更多关于尾部调用优化和迭代的信息。“信息”选项卡有更多的资源。

您能为我指点一下吗。我是LISP编程新手。我知道如何在C语言中做到这一点,但我不知道如何在LISP语言中做到这一点。我被卡住了。如果您能帮助我,我将不胜感激。您应该先阅读LISP文档,了解
排序
defun
cond
car
cdr
列表
,等等。网上有很多文档和示例。然后试着问一个具体的问题,你在哪里被卡住了。
(defun bubble-sort (list)
  (cond ((apply #'< list) list)
        (t (bubble-sort (bubble-up list)))))

CL-USER> (bubble-sort '(6 4 3 9 8 10 1 12))
==> (1 3 4 6 8 9 10 12)