Prolog游程长度编码

Prolog游程长度编码,prolog,Prolog,由于病毒的原因,我被困在家里无所事事,我决定开始学习Prolog,我一直在研究不同的问题,从LearnProlog到99 Prolog问题 我目前被一个游程编码问题困扰着,希望能得到任何关于这个问题的帮助或指导 这是我一直想问的问题: 编写一个谓词encode/2,将未压缩列表作为第一个参数,并返回压缩列表,如第二个参数所示。例如: encode(['a','b','b','c','c','c','d','d'],X) should yield X = [ (a, 1), (b, 2), (c,

由于病毒的原因,我被困在家里无所事事,我决定开始学习Prolog,我一直在研究不同的问题,从LearnProlog到99 Prolog问题

我目前被一个游程编码问题困扰着,希望能得到任何关于这个问题的帮助或指导

这是我一直想问的问题:

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

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

And then to decode it:

Write a predicate decode/2 that takes the compressed list as a first parameter and returns the uncompressed list as shown as the second parameter. For example:
```decode([],X) should yield X = [].
decode([(a,1), (b,2), (c,3), (d,2)],X) should yield X = ['a','b','b','c','c','c','d','d'] .
decode([(a,1), (p,2), (l,1), (e,1)],X) should yield X =  ['a','p','p','l','e'].```


你可以从你已经拥有的东西开始:

encode(['a','b','b','c','c','c','d','d'],X):-
X=[(a,1)、(b,2)、(c,3)、(d,2)]。
也就是说,情况也是如此

encode(['b','b','c','c','c','d','d'],X2):-
X2=[(b,2),(c,3),(d,2)]。
因此

encode(['a','b','b','c','c','c','d','d'],X):-
编码(['b','b','c','c','c','d','d'],X2)
X=[(a,1)| X2]。
这和

编码(L,X):-
L=['a','b','b','c','c','c','d','d'],
L=[H | T],
编码(T,X2),
X=[(a,1)| X2]。
这和

编码(L,X):-
L=['a','b','b','c','c','c','d','d'],
L=[H | T],
编码(T,X2),
添加_编码(H,X2,X)。
添加_编码('a',[(b,2),(c,3),(d,2)],X2):-
X2=[(a,1)|[(b,2),(c,3),(d,2)]。

你看到了吗?当我们用逻辑变量替换具体术语来概括具体案例时,您看到代码是如何编写的了吗?你还可以继续吗?

感兴趣的:RosettaCode是的,你可以重述一下问题,但你的困难是什么?你被困在哪里?你写了什么东西吗?请将其包含在您的问题中,以便我们可以尝试帮助您摆脱困境。你不知道从哪里开始吗?到底是什么问题?嗯。。。这是一个有趣的解释方法。这也不是我第一次这么做。(例如,如果有记忆的话,还有一些。)给你。(找到它时带着)。