Кодирование длины прогона пролога - PullRequest
1 голос
/ 27 апреля 2020

Так как я застрял дома и ничего не могу сделать из-за вируса, я решил начать изучать Пролог. Я работал над различными вопросами из изучения Пролога и из 99 проблем Пролога.

Я в настоящее время застрял в вопросе о кодировке длины выполнения и был бы признателен за любую помощь или руководство по этой проблеме.

Вот вопрос, на котором я застрял:

Напишите кодировку предиката / 2, которая принимает несжатый list в качестве первого параметра и возвращает сжатый список, как показано в качестве второго параметра. Например:

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'].```

1 Ответ

1 голос
/ 27 апреля 2020

Вы можете начать с того, что у вас уже есть:

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) ] ] .

Вы видите? Вы видите, как код записывает себя , когда мы обобщаем наши конкретные случаи, заменяя конкретные термины логическими переменными? Вы можете продолжить это еще?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...