gpt4 book ai didi

recursion - Lisp 分析原子列表和列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:28 27 4
gpt4 key购买 nike

我刚刚学习 lisp,我被要求编写一个名为 analyze 的函数,该函数接受一个列表并返回一个由符号“atom”和“list”组成的列表。

例如,(analyze ‘(a b (c d) e f)) 应该返回 (atom atom list atom atom)

这是我目前所拥有的:

(defun analyze(l)                   


(and l
(if (not(null (atom (first l))
)
)

'atom 'list
)
(or (null (rest l))
(analyze (rest l)))
)
)

出于某种原因,它总是返回 T。

最佳答案

我猜你的意图是这样的:

(defun analyze (l)                   
(if l ; if list is not empty
(cons ; add
(if (atom (car l)) ; 1) a symbol describing the type of (car a)
'atom
'list)
(analyze (cdr l))))) ; 2) do the same with the rest of the list

正确缩进的代码如下所示:

(defun analyze (l)                   
(and l
(if (not (null (atom (first l))))
'atom 'list)
(or (null (rest l))
(analyze (rest l)))))

所以它是之间<​​/p>

  1. l,列表 - 如果列表不为空则为真
  2. 'atom 或 'list - 都是符号,都是逻辑真
  3. 如果列表的其余部分为空,则为真,或者分析的结果(始终为真)

所以它等同于(和 t t t ...),t 的数量是列表中项目的数量。

关于recursion - Lisp 分析原子列表和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435238/

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