gpt4 book ai didi

lisp - 如何在 LISP 中将列表中的每个元素递增 1

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

我正在学习 LISP,我正在尝试编写一个函数,将列表中的每个元素加 1。我首先测试第一个元素是否为数字,然后将 1 添加到列表中的第一个元素。然后我递归地调用列表其余部分的函数,但出现错误。有什么帮助吗?这是函数:

 (defun add-1-all (L)
(cond (not (numberp (first L)) nil)
(t (+1 (first L)) (add-1-all (rest L)))))

最佳答案

这里有更多的方法:

  1. 处理列表时(参见 Joshua 的评论),使用 ENDP , FIRSTREST ,它们优于 NULLCARCDR。它们更清楚地传达了意图,并且在 ENDP 的情况下,检查参数是否为适当列表。想象一下,你传递了一个用 (cons 'a 'b) 构建的点列表,会发生什么? ENDP 检测到列表不正确并发出错误信号。

    (defun add-1-all (list)
    (unless (endp list)
    (cons (1+ (first list))
    (add-1-all (rest list)))))

我使用 UNLESS 作为它的 NIL 值,有些人可能不喜欢。您可能希望在到达列表末尾时明确返回 NIL。在这种情况下,请坚持使用 COND 或仅使用 IF

  1. 循环。

    (defun add-1-all (list)
    (loop for e in list collect (1+ e)))
  2. 让它也适用于数组,而不仅仅是列表。

    (defun add-1-all (sequence)
    (map (type-of sequence) #'1+ sequence))

关于lisp - 如何在 LISP 中将列表中的每个元素递增 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32685245/

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