05/08/12 08:36:46
>>645
亀だけど Gauche で書いてみた.
入力は ((シンボル . インデント数) ...) みたいな感じ.
(use srfi-1)
(define (iexpr->list xs)
(define (f xs level rs)
(if (null? xs)
(values xs (reverse! rs))
(receive (sym l) (car+cdr (car xs))
(cond ((= l level)
(f (cdr xs) l (cons sym rs)))
((< l level)
(values xs (reverse! rs)))
(else
(receive (rest res) (f xs l '())
(f rest level (cons res rs))))))))
(values-ref (f xs 0 '()) 1))