Переменные, появляющиеся в неправильном порядке - PullRequest
1 голос
/ 28 апреля 2020

Итак, я задаю вопрос Пролога и у меня возникают проблемы с его работой. вопрос просит меня: «Написать предикат myencode / 2, который принимает несжатый список в качестве первого параметра и возвращает сжатый список, как показано в качестве второго параметра». Что я и сделал, единственная проблема в том, что сначала распечатывается как число, а затем как буква. например (2, 'a'0, вместо (' a ', 2). Ниже приведен мой код, любые советы о том, где я ошибся, будут с благодарностью!

pack([],[]).
pack([X|Xs],[Z|Zs]) :- transfer(X,Xs,Ys,Z), pack(Ys,Zs).

transfer(X,[],[],[X]).
transfer(X,[Y|Ys],[Y|Ys],[X]) :- X \= Y.
transfer(X,[X|Xs],Ys,[X|Zs]) :- transfer(X,Xs,Ys,Zs).

myencode(L1,L2) :- pack(L1,L), transform(L,L2).
myencode([X],X):-X=[].
myencode_modified(L1,L2) :- encode(L1,L), strip(L,L2).

transform([],[]).
transform([[X|Xs]|Ys],[[N,X]|Zs]) :- length([X|Xs],N), transform(Ys,Zs).

strip([],[]).
strip([[1,X]|Ys],[X|Zs]) :- strip(Ys,Zs).
strip([[N,X]|Ys],[[N,X]|Zs]) :- N > 1, strip(Ys,Zs).

1 Ответ

0 голосов
/ 28 апреля 2020

Разве это не просто

strip([[N,X]|Ys],[[N,X]|Zs]) :- N > 1, strip(Ys,Zs).

, которое должно быть

strip([[N,X]|Ys],[[X,N]|Zs]) :- N > 1, strip(Ys,Zs).

?

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