常见的LISP补充计划

时间:2015-05-29 18:57:24

标签: lisp common-lisp

我正在尝试编写一个程序,该程序接收一个数字列表,并为列表中的每个元素添加1。同样,如果列表为0,它将返回NIL。我尝试递归地做它,但它显示我没有输出。我知道这很简单,但我是初学者,我很难以递归的方式思考这个问题。谢谢!

2 个答案:

答案 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)))

你在哪里

  1. 修改第1个元素
  2. 将您定义的功能应用于列表的其余部分
  3. 返回一个列表,该列表构成了加入修改后的第一个元素以及将您定义的函数应用于列表其余部分的结果
  4. 这不是全部,你必须考虑当你排除列表时会发生什么......但这很简单,你可以编写一个条件,返回默认值(见上文)该列表不为空,否则为nil

    (if my-list (...) nil)
    

    或使用无其他if的默认行为

    (if my-list (...))