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]
答案 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]的问题很难解决,我的新代码始终会忽略最后一个条目,并给出错误,我会要求您输出检查我的新代码,以便仍有改进的余地,但是至少该代码有效。