リスト内の引用された要素?それは通常意味がありません。なぜあなたはそれを引用してもらうのですか?
(a b c)
3つの記号のリストです。なぜリストの要素を引用するのですか?のように(a 'b c)
?なんで?見積もりの目的は何ですか?
Common Lispは、に展開される'
readmacroです。これは通常のリストであるため、通常のフラット化操作では、シンボルがフラットリストに収集されます。これは、flatten関数が通常、何かがアトムであるかどうかをチェックするためです。これが必要ない場合は、flatten関数で、何かがアトムであるか、最初のシンボルが2要素のリストであるかを確認する必要があります。'a
(QUOTE A)
QUOTE
A
QUOTE
しかし、上で述べたように、引用符で囲まれた記号は通常リスト内では役に立たないため、デフォルトの使用法は記号を平坦化することです。それ以外の場合は、フラット化関数を拡張する必要があります。
例えば:
(defun flatten (l &key (test #'atom))
(cond ((null l) nil)
((funcall test l) (list l))
(t (loop for a in l nconc (flatten a :test test)))))
CL-USER > (flatten '(a (('b) c) ('d) )
:test (lambda (item)
(or (atom item)
(and (eq (first item) 'quote)
(null (cddr item))))))
(A (QUOTE B) C (QUOTE D))