我是一个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/

10-10 13:49
查看更多