如何编写新的NCONC函数?

时间:2016-03-24 07:50:30

标签: common-lisp

函数如何接收列表的两个参数,制作指向第二个列表的最后一个指针的第一个列表。该函数返回一个列表,它是指向第一个列表的指针。 以下是我写的代码:

(defun  my-new-nconc (x y)
    (if (null x)
        y
        (setf (cdddr x) y)))

2 个答案:

答案 0 :(得分:1)

您可以使用RPLACDX中最后一次收益的cdr设置为Y

(defun my-new-nconc (x y)
  (if x
      (progn (rplacd (last x) y)
             x)
      y))

(defparameter *foo* (list 1 2 3))
(defparameter *bar* (list 4 5 6))
(my-new-nconc *foo* *bar*)

*foo*
;=> (1 2 3 4 5 6)

答案 1 :(得分:0)

所以你想要的基本上是连接两个列表:

(defun concatenate-lists (x y)
   "this function check that x and y are lists and concatenates them"
    (when (and (listp x) (listp y))
      (concatenate 'list x y)))

例如:

(concatenate-lists '(1 2 3) '(4 5 6))

如果其中一个不是列表,则结果将为 NIL