解答・コメントを送る方法
コメントを送るには2つの方法があります。
- 匿名でコメントを書くログインせずにコメントを書くことができます。 名前は「匿名」となります。
- アカウントを作成してコメントを書くアカウントを作成すると、記名での投稿ができます。 また、プロフィールページが作成され、 簡単なプロフィールや 統計情報が表示されるようになります。
投稿ボタンを押す前に以下の文章を確認してください
- 当サイトへの投稿は クリエイティブ・コモンズ・ライセンス BY(表示)および、その解釈に同意するものとみなされます。各ページには下のようにライセンス表示が行われます。
- あなたの投稿したコード・コメント・トピックが再利用・添削されることを望まない場合は、投稿をお控えください。
- 自分が書いていない、ウェブサイトや書籍などからの無断コピーは著作権の侵害です。著作権者の了解を得るか、自分で0から書いてください。
- 著作権の侵害、名誉毀損、など投稿内容に問題がある場合、削除することがあります。
- これらのことにあなたはあらかじめ同意したものとみなされます。
Post comment
Post a comment to the following challenge:
親子のペアからツリーを構築
(Nested
Flatten)
As a reply to the following comment: hu2: 親子ペア定義群からツリー構造をつくります...(#6327) [show]

hu2 #6327() [ Common Lisp ] Rating0/0=0.00
親子ペア定義群からツリー構造をつくります ・親子ペア定義 ※親->子 A->B B->C C->D C->E A->F D->X Y->Z Z->C ・ツリー A ->B ->C ->D ->X ->E ->F Y ->Z ->C ->D ->X ->E; 親子ペア定義 (setf pair-lst '((a b) (b c) (c d) (c e) (a f) (d x) (y z) (z c) )) ;; 同一の親を持つペアをマージする ;; ex) ((p1 c1) (p1 c2) (p2 c3) (p2 c4)) -> ((p1 c1 c2) (p2 c3 c4)) (defun gen-fmly-lst (plst) (defun merge-lst (frst rst) (if (null rst) frst (if (eq (car frst) (caar rst)) (merge-lst (append frst (cdar rst)) (cdr rst)) (merge-lst frst (cdr rst))))) (labels ((rec (lst acc) (if (null lst) acc (if (member (caar lst) acc :key #'car) (rec (cdr lst) acc) (rec (cdr lst) (cons (merge-lst (car lst) (cdr lst)) acc)))))) (rec plst nil))) ;; fmlyのリストからツリーを生成する (defun gen-fmly-tr (fmly-lst) (labels ((rec (flst acc) (if (null flst) acc ; hook前のfmlyをhook後のfmly(n次元リスト)に置き換えて処理をする (let* ((nD-fmly (car (member (caar flst) acc :key #'car))) (othr (other nD-fmly acc))) ; fmlyをhook処理し、一箇所もhookできなかったらfmlyをそのままaccに加える (if (equal othr (hook nD-fmly othr)) (rec (cdr flst) (cons nD-fmly othr)) (rec (cdr flst) (hook nD-fmly othr))))))) (rec fmly-lst fmly-lst))) ;; リストからobjを除いたリストを取得する (defmacro other (obj lst) `(remove-if #'(lambda (x) (equal ,obj x)) ,lst)) ;; リストのcarと一致するatomをツリーの中で見つけた場合、該当atomをリストで置き換える ;; ex) (hook '(a x) '(a (b a) (c (d a)))) -> ((a x) (b (a x)) (c (d (a x)))) (defun hook (lst tree) (cond ((eq (car lst) tree) lst) ((atom tree) tree) (t (cons (hook lst (car tree)) (hook lst (cdr tree)))))) (defun main () (gen-fmly-tr (gen-fmly-lst pair-lst))) ; 実行すると、下記の構造が得られる ; ((A (B (C (D X) E)) F) (Y (Z (C (D X) E)))) ; インデントすると ;((A ; (B ; (C ; (D ; X) ; E)) ; F) ; (Y ; (Z ; (C ; (D ; X) ; E))) ; )Rating0/0=0.00-0+
[ reply ]