使用prolog编码给定的输入

时间:2018-10-23 18:21:24

标签: prolog

count([_],[],1).    
count(H,[H1|T],N):- count(H1,T,N1),(H = H1 -> N is N1+1 ; H \=H1 -> N is 1).   

encode([]).
encode([H|T]):- count(H,T,N1),encode(T),write("["),write(N1),write("],").

上面是我的Prolog代码,用于计数和打印连续出现的字母并以期望的方式进行输出。
例如,如果 样本输入:

?- encode("555555577777777199999111111").

应该返回

Encoded Output:
[7,5],[8,7],1,[5,9],[1,6] 

1 个答案:

答案 0 :(得分:0)

下面给出的代码

findnext(H,[],H)。

findnext(H,[H | T],[]):-T = []。

findnext(H,[H1 | T],[H1 | T]):-H \ = H1。

findnext(H,[H | T],X):-findnext(H,T,X1),append(X1,[],X)。

count([_],[],1)。

count(H,[H | T],2):-T = []。

count(H,[H1 | _],1):-H \ = H1,!。

count(H,[H | T],N):-count(H,T,N1),N为N1 + 1。

encode([]):-!。

编码([H | T]):-计数(H,T,N1),写(“ [”),写(H),写(“,”),写(N1),写(“] ,“),findnext(H,T,X),编码(X)。

str_encode(S):-atom_chars(S,X),encode(X)。

结束

关于您所有有价值的建议的新代码,但是对我来说仅打印1而不是[1,1]的问题很难解决,我的新代码始终会忽略最后一个条目,并给出错误,我会要求您输出检查我的新代码,以便仍有改进的余地,但是至少该代码有效。