gpt4 book ai didi

lisp - 首先从 LISP 中的列表中排序原子,然后排序子列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:31 25 4
gpt4 key购买 nike

我在 LISP 中有这个家庭作业,我需要在其中对原子进行分类,然后从列表中提取子列表。我确信这应该是一件容易的事,但由于我不是一个程序员,所以我真的需要很长时间才能理解。

我有这个数字列表:

(5 -1 (2 6 1) (8 7 -3) (0 (9 4)) -6)

如果我正确理解了我的任务,那么我应该得到这样的结果:

(5 -1 -6 (2 6 1) (8 7 -3) (0 (9 4)))

到目前为止,我只知道如何计算原子和/或子列表,但我不需要那个。

(DEFUN ATOMNUMBER (L) (COND ((NULL L) 0)
((ATOM (CAR L)) (+ 1 (ATOMNUMBER (CDR L))))
(T (ATOMNUMBER (CDR L))) ))

即使只有子列表、原子或空列表,该函数也应该正常工作。

也许有人可以给我任何例子?

提前致谢!

最佳答案

Common Lisp 中有几种可能的方法:

  • 使用 REMOVE-IF 删除不需要的项目。 (或者使用 REMOVE-IF-NOT 来保留想要的项目。)您需要两个列表。附加它们。

  • 使用 DOLIST 并遍历列表,将项目收集到两个列表中并附加它们

  • 编写一个需要保留两个结果列表的递归过程。

  • 还应该可以将 SORT 与特殊的排序谓词一起使用。

例子:

> (sort '(1 (2 6 1) 4 (8 7 -3) 4 1 (0 (9 4)) -6 10 1)
(lambda (a b)
(atom a)))

(1 10 -6 1 4 4 1 (2 6 1) (8 7 -3) (0 (9 4)))

作为稳定版:

(stable-sort '(1 (2 6 1) 4 (8 7 -3) 4 1 (0 (9 4)) -6 10 1)
(lambda (a b)
(and (atom a)
(not (atom b)))))

(1 4 4 1 -6 10 1 (2 6 1) (8 7 -3) (0 (9 4)))

关于lisp - 首先从 LISP 中的列表中排序原子,然后排序子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10573139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com