問題描述
該題是實現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
實現。