05/08/15 23:19:44
>>667からvalues関係を取っ払ってみた。
そんだけ。
(define (iexpr->list xs)
(define (f xs level rs)
(if (null? xs)
(cons xs (reverse! rs))
(let ((sym (caar xs)) (l (cdar xs)))
(cond ((= l level)
(f (cdr xs) l (cons sym rs)))
((< l level)
(cons xs (reverse! rs)))
(else
(let ((x (f xs l '())))
(f (car x) level (cons (cdr x) rs))))))))
(cdr (f xs 0 '())))
>(iexpr->list '((a . 0)(b . 1)(c . 4)(d . 5)(d . 2)(e . 3)(f . 0)))
=>(a (b (c (d)) (d (e))) f)
なかなか面白いですな。
これ使って何かに繋がらないかな。
すぐ思いつくのはGUIコントロールの階層表現ぐらいだけど。