问题描述
该题是实现P11的逆操作,即将P11编码过的列表进行解码。如
sash> (decode '((4 a) b (2 c) (2 a) d (4 e)))
sash> (a a a a b c c a a d e e e e)
解法
递归实现
思路:(1) 将(N E)转换为
'(E ... E)
列表形式,单独的E转换为'(E)
列表;(2) 依次append
这些列表即可得到答案。(define to-list (lambda (ne) (if (list? ne) (let f ([ls '()] [n (car ne)]) (cond [(zero? n) ls] [else (f (cons (cadr ne) ls) (- n 1))])) (list ne)))) (define decode (lambda (ls) (cond [(null? ls) '()] [else (append (to-list (car ls)) (decode (cdr ls)))])))
上面的
decode
也可使用reduce
实现。