公共LISP加法程序

公共LISP加法程序,lisp,common-lisp,Lisp,Common Lisp,我试着写一个程序,它接受一个数字列表,并向列表中的每个元素添加1。类似地,如果列表为0,它将返回NIL。我试着递归地做,但没有结果。我知道这很简单,但我是一个初学者,我真的很难反复思考这个问题。谢谢 列表由cons组成。它有第一个值和一个由除第一个值以外的其余列表组成的列表。因此,您应该检查您的列表是否为null(或endp,两者相同),如果不是,则使用first的计算和使用rest的递归调用进行cons。作为论据 (add-1 '(1 . (2 . (3 . ())))) ; ==> (

我试着写一个程序,它接受一个数字列表,并向列表中的每个元素添加1。类似地,如果列表为0,它将返回NIL。我试着递归地做,但没有结果。我知道这很简单,但我是一个初学者,我真的很难反复思考这个问题。谢谢

列表由
cons
组成。它有第一个值和一个由除第一个值以外的其余列表组成的列表。因此,您应该检查您的列表是否为
null
(或
endp
,两者相同),如果不是,则使用
first
的计算和使用
rest
的递归调用进行
cons
。作为论据

(add-1 '(1 . (2 . (3 . ())))) ; ==> (2 . (3 . (4 . ())))
或更常见的文字:

(add-1 '(1 2 3)) ; ==> (2 3 4)

如果你的作业要求你定义一个递归函数(为了一般性,比如说
myfun
)来对列表中的每个元素做一些事情,你可以使用这个习惯用法

(cons (do-something-on (car my-list)) (my-fun (cdr my-list)))
你在哪里

  • 修改第一个元素
  • 将定义的函数应用于列表的其余部分
  • 返回一个连接修改后的第一个元素的列表,以及将定义的函数应用于列表其余部分的结果
  • 这还不是全部,你必须考虑到当你检查列表时会发生什么。。。但这很简单,如果列表不为空,则可以编写一个返回默认值的条件(见上文),否则返回
    nil

    (if my-list (...) nil)
    
    或者,使用else less
    if
    的默认行为

    (if my-list (...))
    

    当你说“尝试编写程序”时,你真的是指“尝试编写函数”吗?此外,你说你尝试了一些不起作用的东西。。。如果你想得到解决方案方面的帮助,最好发布你当前的解决方案,否则可能没有人会给你现成的解决方案。“我试着递归地做,但没有结果。”我在你的问题中看不到这一点。请注意,寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者来说是没有用处的。“这很简单,但我是一个初学者,递归思考问题对我来说真的很难。”为什么要递归思考呢?
    (defun add-1(列表)(mapcar'1+列表))有什么问题?您不需要知道mapcar是如何实现的(它可以是递归的,但这是一个实现细节)。但您也可以
    (在list collect(1+x)中循环x)
    。这似乎是非递归的(尽管实现可以是递归的),而且它也可以正常工作。听起来你要么是在假设需求,要么是你有没有陈述的需求。