CommonLisp Scheme Part13at TECH
CommonLisp Scheme Part13 - 暇つぶし2ch658:デフォルトの名無しさん
05/08/10 22:19:54
>>650氏のコードを自分の想定した入力形式に書き換えてみました。

(define (proc arg)
 (let loop ((rest arg) (temp '()) (result '()))
  (if (null? rest)
   (reverse (if (null? temp) result `(,(proc (reverse temp)) ,@result)))
   (let ((node (car rest)))
    (if (< (car node) 2)
     (loop (cdr rest) '()
      (if (null? temp)
       `(,(cadr node) ,@result)
       `(,(cadr node) ,(proc (reverse temp)) ,@result)))
     (loop (cdr rest)
      `(,(cons (- (car node) 2) (cdr node)) ,@temp) result))))))

(proc '((0 a) (0 b) (2 c) (4 d) (12 dd) (4 e) (2 f) (2 g) (4 h) (6 i) (2 j) (0 k) (2 m)))
=>(a b (c (d ((((dd)))) e) f g (h (i)) j) k (m))

(< (car node) 2)の箇所はインデント幅が奇数だったら小さい側へ切捨てる処置です。



次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch