您的位置:首页 > 其它

P12 (**) 解码游程编码过的列表

2015-12-30 22:43 239 查看

问题描述

该题是实现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
实现。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息