【问题标题】:Prolog Run Length EncodingProlog 运行长度编码
【发布时间】:2020-04-28 01:59:21
【问题描述】:

由于我因病毒被困在家里无事可做,我决定开始学习 Prolog,我一直在解决学习 Prolog 和 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'].```

【问题讨论】:

  • 感兴趣的:RosettaCode Run Length Encoding
  • 是的,您重述了这个问题,但您的困难是什么? 在哪里卡住了?你写过什么吗?请将其包含在您的问题中,以便我们尝试帮助您摆脱困境。你不知道从哪里开始?究竟是什么问题?

标签: prolog


【解决方案1】:

你可以从已有的开始:

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) :-
    encode(['b','b','c','c','c','d','d'], X2)
    X = [ (a, 1) | X2 ] .

相同
encode( L, X) :-
    L = ['a','b','b','c','c','c','d','d'],
    L = [ H | T ],
    encode( T, X2),
    X = [ (a, 1) | X2 ] .

相同
encode( L, X) :-
    L = ['a','b','b','c','c','c','d','d'],
    L = [ H | T ],
    encode( T, X2),
    add_encoded( H, X2, X).

add_encoded( 'a', [ (b, 2), (c, 3), (d, 2) ], X2 ) :-
    X2 = [ (a, 1) | [ (b, 2), (c, 3), (d, 2) ] ] .

你看到了吗?当我们通过用逻辑变量替换具体术语来概括我们的具体案例时,您是否看到代码是如何自己编写的?你还能继续这个吗?

【讨论】:

  • 嗯...这是一种有趣的解释方法。
  • 这也不是我第一次这样做。 (例如this,还有更多,如果没记错的话)。 :)
  • 这里是one more。 (通过this search 找到它)。
猜你喜欢
  • 1970-01-01
  • 2013-02-01
  • 2012-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多