我是一个 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 打印返回值。