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] 发布于 2018-10-27 18:49:00
以下代码
下一个(H,[],H)。
查找下一个(H,H=T,[]):- T= []。
查找下一步(H,H1 =T,H1=T):-H \= H1。
查找下一步(H,H= T,X):- findnext(H,T,X1),附加(X1,[],X)。
计数(_,[],1)。
计数(H,H=T,2):-T= []。
计数(H,H1|_,1):- H \= H1!
计数(H,H= T,N):计数(H,T,N1),N为N1+1。
编码([]):-!
编码(H=T):计数(H,T,N1),写(“"),写(H),写(”,"),写(N1),写(“,”),查找下一步(H,T,X),编码(X)。
str_encode(S) :- atom_chars(S,X),编码(X)。
结束
对于所有有价值的建议,一个新的代码,但是只打印1而不是1,1的问题对我来说是很困难的,而且我的新代码总是忽略最后一个条目,并给出一个错误的输出,我会要求您检查我的新代码,所以仍然有改进的余地,但至少这段代码可以工作。
https://stackoverflow.com/questions/52955498
复制相似问题