我正在尝试编写一个程序,该程序接收一个数字列表,并为列表中的每个元素添加1。同样,如果列表为0,它将返回NIL。我尝试递归地做它,但它显示我没有输出。我知道这很简单,但我是初学者,我很难以递归的方式思考这个问题。谢谢!
答案 0 :(得分:0)
列表由cons
组成。它具有第一个值和一个由列表的其余部分组成的列表,第一个值除外。因此,您应该检查您的列表是null
(或endp
是否相同),如果不是,则使用{{1}进行计算cons
}和使用first
的递归调用。作为论点。
rest
或更常见的写作:
(add-1 '(1 . (2 . (3 . ())))) ; ==> (2 . (3 . (4 . ())))
答案 1 :(得分:0)
如果你的作业要求你定义一个递归函数(比如说my-fun
的一般性)来对列表的每个元素做一些事情你就可以使用这个成语
(cons (do-something-on (car my-list)) (my-fun (cdr my-list)))
你在哪里
这不是全部,你必须考虑当你排除列表时会发生什么......但这很简单,你可以编写一个条件,返回默认值(见上文)该列表不为空,否则为nil
。
(if my-list (...) nil)
或使用无其他if
的默认行为
(if my-list (...))