我將如何去查找在序言中的列表中找到連續的字符串重複。在列表中查找重複
什麼我究竟試圖找到,例如,是這樣的:
input => output
AAAAAA => 6*(A)
ABABAB => 3*(AB)
ABCABCABC => 3*(ABC)
我寫了DCG文法這一點,我試圖把它給我這個結果。
這裏的語法,如果需要的話:
exp --> term.
exp --> term, [+], exp.
term --> factor.
term --> digit, [*], exp.
factor --> elem.
factor --> ['S'], ['['], sym, [']']. %S[(A)(B),(C)]
factor --> ['<'], alt, ['>'], ['/'], ['<'], alt, ['>']. %<(A)>/<(B)(C)(D)>
factor --> ['('], exp, [')'].
sym --> factor.
sym --> factor, [','], factor.
sym --> factor, sym.
alt --> factor.
alt --> factor, alt.
elem --> char.
elem --> char, elem.
char --> [D], {is_alnum(D)}.
digit --> [D], {is_alnum(D)}.
digit --> [D], {number(D)}.
nbr_to_char(N, Cs) :-
name(Cs, [N]).
str_to_list(S, Cs) :-
name(S, Xs),
maplist(nbr_to_char, Xs, Cs).
eval(L) :-
str_to_list(L, X),
exp(X, []).
感謝您的幫助。
也許這將是很好的提供語法? –
我沒有發現它是必要的,因爲語法處理的方式比這個更多的情況下,但我會把它放在任何地方。 – CpCd0y
ABCABCAB爲什麼會產生「3 *(ABC)」?你想要什麼'AAABBBAAABBB'導致? – lurker