2011-01-18 15 views
0

私は((a)(b)(f(x)))のリストを持っています。私が得たいのは、((a)(b)(f(x1))(a)(b)(f(x2))(a)(b)(f(x3))))のリンクリスト構造です。すなわち、ユーザの要求に基づいてリストを繰り返し追加し、変数の値は、その値がお互いからユニークになるように、チャニングしている。どのように私はLISPでそれを実装できますか?可変長のリンクリストの作成

答えて

2
? (let ((list '((a) (b) (f (x)))) 
     (n 3)) 
    (flet ((copier (l n) 
      (setf l (copy-tree l)) 
      (let ((sym (first (second (third l))))) 
       (setf (first (second (third l))) 
        (intern (format nil "~a~a" 
            (symbol-name sym) 
            n)))) 
      l)) 
     (loop for i from 1 upto n 
     nconc (copier list i)))) 

((A) (B) (F (X1)) (A) (B) (F (X2)) (A) (B) (F (X3))) 
+0

...突然、私のソリューションはかなりエレガントに見えます。 –

+0

@larsmans:a)リストを入力として受け取ります。 b)COLLECTはしませんが、APPEND ... - 結果リストのネストを確認してください。 –

+0

ああ、そうです。私はその質問を誤解した。 (OPの結果リストにはカッコのバランスが崩れています) –

関連する問題