2012-10-15 110 views
0

我是一個lisp新手,我試圖在lisp中操縱列表。這是來自uni的實用教程。當我調用函數時,列表中的第一個元素需要增加1,其餘元素保持原樣。 下面是一個例子:列表操作

(inc-1st '(1 2 3 4)) => (2 2 3 4) 

我試圖解決這個問題,但我從列表中第一個號碼不打印。這裏是我的代碼:

(defun inc-1st (list) 
    (and (+ 1(car list)) (cdr list))) 

,輸出是:(2 3 4)

+0

如果您希望在您的問題中指出詳細或解釋性幫助,「家庭作業」標籤已過時並被刪除。 – TheZ

+0

好吧,我不知道。 –

回答

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

+0

chers mate,正是我所需要的 –