0

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

4

1 回答 1

1

标准 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 打印返回值。

于 2012-10-15T16:40:44.777 回答