首页 > 解决方案 > 使用运行长度编码压缩序言中的列表

问题描述

我正在学习序言,并且一直在努力解决家庭作业问题。问题是:

“编写一个谓词 myencode/2,它将未压缩列表作为第一个参数并返回压缩列表,如第二个参数所示。例如”。

myencode([],X) should yield X = [].
myencode(['a','b','b','c','c','c','d','d'],X) should yield X = [ (a, 1), (b, 2), (c, 3), (d, 2)] .
myencode(['a','p','p','l','e'],X) should yield X = [ (a, 1), (p, 2), (l, 1), (e, 1)] .

这些问题建议:

“您可能会发现编写一个 tempencode/2 函数将列表['a','a','a','b','b','c','a','a'] 转换为[('a',1),('a',1),('a',1),('b',1),('b',1),('c',1),('a',1),('a',1)]

到目前为止,我已经能够让 tempencode 函数工作

myencode(L,X) :- tempencode(L,X).

tempencode([],[]).
tempencode([H|T],[(H,1)|X]) :- tempencode(T,X).

这给了我

?- myencode(['a','a','a','b','b','c'],X).
X = [ (a, 1), (a, 1), (a, 1), (b, 1), (b, 1), (c, 1)].

我不知道如何从这里开始,任何指导将不胜感激。

标签: prologrun-length-encoding

解决方案


推荐阅读