Wie würde ich fortlaufende Wiederholung einer Zeichenfolge in einer Liste in Prolog suchen.Finden Sie Wiederholungen in einer Liste
Was ich genau das zu finden, zum Beispiel versuchen, ist dies:
input => output
AAAAAA => 6*(A)
ABABAB => 3*(AB)
ABCABCABC => 3*(ABC)
ich eine DCG Grammatik für diese geschrieben und ich versuche, es mir dies als ein Ergebnis zu haben geben.
Hier ist die Grammatik, falls erforderlich:
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, []).
Vielen Dank für jede Hilfe.
Vielleicht wäre es nett, die Grammatik zu bieten? –
Ich fand es nicht notwendig, da die Grammatik viel mehr Fälle als diese behandelt, aber ich werde es trotzdem sagen. – CpCd0y
Warum würde 'ABCABCAB' zu' 3 * (ABC) 'führen? Und was willst du von AAABBBAAABBB? – lurker