公共LISP加法程序
我试着写一个程序,它接受一个数字列表,并向列表中的每个元素添加1。类似地,如果列表为0,它将返回NIL。我试着递归地做,但没有结果。我知道这很简单,但我是一个初学者,我真的很难反复思考这个问题。谢谢 列表由公共LISP加法程序,lisp,common-lisp,Lisp,Common Lisp,我试着写一个程序,它接受一个数字列表,并向列表中的每个元素添加1。类似地,如果列表为0,它将返回NIL。我试着递归地做,但没有结果。我知道这很简单,但我是一个初学者,我真的很难反复思考这个问题。谢谢 列表由cons组成。它有第一个值和一个由除第一个值以外的其余列表组成的列表。因此,您应该检查您的列表是否为null(或endp,两者相同),如果不是,则使用first的计算和使用rest的递归调用进行cons。作为论据 (add-1 '(1 . (2 . (3 . ())))) ; ==> (
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 lessif
的默认行为
(if my-list (...))
当你说“尝试编写程序”时,你真的是指“尝试编写函数”吗?此外,你说你尝试了一些不起作用的东西。。。如果你想得到解决方案方面的帮助,最好发布你当前的解决方案,否则可能没有人会给你现成的解决方案。“我试着递归地做,但没有结果。”我在你的问题中看不到这一点。请注意,寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现这些问题所需的最短代码。没有明确问题陈述的问题对其他读者来说是没有用处的。“这很简单,但我是一个初学者,递归思考问题对我来说真的很难。”为什么要递归思考呢?
(defun add-1(列表)(mapcar'1+列表))有什么问题?您不需要知道mapcar是如何实现的(它可以是递归的,但这是一个实现细节)。但您也可以(在list collect(1+x)中循环x)
。这似乎是非递归的(尽管实现可以是递归的),而且它也可以正常工作。听起来你要么是在假设需求,要么是你有没有陈述的需求。