我是一个lisp新手,我试图在lisp中操作列表这是大学的实践教程当我调用函数时,列表中的第一个元素需要增加一个,其余的元素保持原样。
下面是一个例子:
(inc-1st '(1 2 3 4)) => (2 2 3 4)
我试图解决它,但我的第一个号码从名单上没有打印这是我的代码:
(defun inc-1st (list)
(and (+ 1(car list)) (cdr list)))
结果是:
(2 3 4)
最佳答案
标准CL宏INCF将执行您想要的操作:
[1]> (defparameter list (list 1 2 3))
LIST
[2]> (incf (first list))
2
[3]> list
(2 2 3)
(尝试
(macroexpand (incf (first list)))
查看其工作原理。)所以你的功能是
(defun inc-1st (list)
(incf (first list))
list)
注意打印值和返回值之间的区别:上面的函数返回
list
,而REPL打印返回值。关于list - 列表操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12899958/