リスト内のアトムの数を返すだけの基本的なclisp関数を作成しています。私が抱えている問題は、リストをリスト内の1つの要素として表示するのではなく、リスト内のリスト内のアトムをインクリメントする必要があることです。
私が推測する本当の質問は、要素がリストであるかアトムであるかをコードでどのように区別するかです。それができれば、リストを別の関数に送信して、リストに含まれるアトムの数を合計して返すことができます。
泥のように澄んでいますか?:)
ここに例があります:
(defun list_length (a)
(cond ((null a) 0)
(t (+ 1 (list_length (cdr a))))))
これは、親リストに埋め込みリストがない場合にうまく機能します。たとえば、
'(1 2 3 (4 5) 6)
5が返されます。リスト(4 5)の代わりに4と5を1つとして含める必要があります。
ご協力いただきありがとうございます。
ジョン
編集:
(defun list_length (a)
(cond ((null a) 0)
((listp (car a)) (list_length (car a)))
(t (+ 1 (list_length (cdr a))))))
[18]> (list_length '(1 2 3 (4 5) 6))
1. Trace: (LIST_LENGTH '(1 2 3 (4 5) 6))
2. Trace: (LIST_LENGTH '(2 3 (4 5) 6))
3. Trace: (LIST_LENGTH '(3 (4 5) 6))
4. Trace: (LIST_LENGTH '((4 5) 6))
5. Trace: (LIST_LENGTH '(4 5))
6. Trace: (LIST_LENGTH '(5))
7. Trace: (LIST_LENGTH 'NIL)
7. Trace: LIST_LENGTH ==> 0
6. Trace: LIST_LENGTH ==> 1
5. Trace: LIST_LENGTH ==> 2
4. Trace: LIST_LENGTH ==> 2
3. Trace: LIST_LENGTH ==> 3
2. Trace: LIST_LENGTH ==> 4
1. Trace: LIST_LENGTH ==> 5
5
[19]> (dribble)