普通LISP加法程序
Common LISP addition program
我试图编写一个程序,它接受一个数字列表并将列表中的每个元素加 1。同样,如果列表为 0,它将 return NIL。我试着递归地做,但它没有显示任何输出。我知道这很简单,但我是一个初学者,我真的很难递归地思考这个问题。谢谢!
列表由cons
组成。它具有第一个值和一个列表,该列表由除第一个值之外的列表的其余部分组成。因此,您应该检查您的列表是否为 null
(或相同的 endp
),如果不是,则根据 [=16= 的计算得出 cons
] 和使用 rest
的递归调用。作为参数。
(add-1 '(1 . (2 . (3 . ())))) ; ==> (2 . (3 . (4 . ())))
或者更常见的写法:
(add-1 '(1 2 3)) ; ==> (2 3 4)
如果你的作业要求你定义一个递归函数(比如 my-fun
的通用性)来对列表的每个元素做一些事情,你可以使用这个习惯用法
(cons (do-something-on (car my-list)) (my-fun (cdr my-list)))
你在哪里
- 修改第一个元素
- 将您定义的函数应用于列表的其余部分
- return 连接修改后的第一个元素和将您定义的函数应用于列表其余部分的结果构造的列表
这还不是全部,你必须考虑到当你耗尽列表时会发生什么......但这很简单,你可以写一个条件 returns 默认值(见上文)如果列表不为空,否则 nil
。
(if my-list (...) nil)
或者,使用 else-less 的默认行为 if
,
(if my-list (...))
我试图编写一个程序,它接受一个数字列表并将列表中的每个元素加 1。同样,如果列表为 0,它将 return NIL。我试着递归地做,但它没有显示任何输出。我知道这很简单,但我是一个初学者,我真的很难递归地思考这个问题。谢谢!
列表由cons
组成。它具有第一个值和一个列表,该列表由除第一个值之外的列表的其余部分组成。因此,您应该检查您的列表是否为 null
(或相同的 endp
),如果不是,则根据 [=16= 的计算得出 cons
] 和使用 rest
的递归调用。作为参数。
(add-1 '(1 . (2 . (3 . ())))) ; ==> (2 . (3 . (4 . ())))
或者更常见的写法:
(add-1 '(1 2 3)) ; ==> (2 3 4)
如果你的作业要求你定义一个递归函数(比如 my-fun
的通用性)来对列表的每个元素做一些事情,你可以使用这个习惯用法
(cons (do-something-on (car my-list)) (my-fun (cdr my-list)))
你在哪里
- 修改第一个元素
- 将您定义的函数应用于列表的其余部分
- return 连接修改后的第一个元素和将您定义的函数应用于列表其余部分的结果构造的列表
这还不是全部,你必须考虑到当你耗尽列表时会发生什么......但这很简单,你可以写一个条件 returns 默认值(见上文)如果列表不为空,否则 nil
。
(if my-list (...) nil)
或者,使用 else-less 的默认行为 if
,
(if my-list (...))