0

私はLispの初心者で、lispのリストを操作しようとしています。これは、大学での実践的なチュートリアルからのものです。関数を呼び出すとき、リストの最初の要素を1つインクリメントし、残りをそのままにしておく必要があります。次に例を示します。

(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)

値の出力と戻り値の違いに注意してください。REPLが戻り値を出力している間、上記の関数は戻り値を返します。 list

于 2012-10-15T16:40:44.777 に答える