2016-03-24 28 views
-1

İşlev, iki listeden oluşan parametreleri nasıl alır, ikinci listenin ilk listelerini listeler. Fonksiyon bir liste döndürür, ilk listelerin bir göstergesidir.Yeni NCONC işlevi nasıl yazılır?

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

cevap

1

Sen Y için X son eksileri cdr ayarlamak için RPLACD kullanabilirsiniz: Aşağıda yazdım koddur. örneğin

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

:

(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

"rplacd" yerine "setr" in "setf" ini görmek daha yaygındır, fakat yanlış bir şey yoktur ya da – Svante

+0

çok teşekkürler, – FAMMMM

+1

Zorunlu ekle "değişmez verileri burada değiştirmeyin". (Evet, bunun sadece bir örnek olduğunu biliyorum, ama belki de böyle bir soruyu arayan kullanıcılar için bu daha da önemli hale geliyor.) –

0

Yani ne istediğiniz iki listeleri bitiştirmek için temelde sonuç olacaktır bunlardan biri listesi değilse

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

NIL