Comment rechercher une répétition consécutive d'une chaîne dans une liste dans prolog?Rechercher des répétitions dans une liste
Ce que je suis exactement essayer de trouver, par exemple, est la suivante:
input => output
AAAAAA => 6*(A)
ABABAB => 3*(AB)
ABCABCABC => 3*(ABC)
j'ai écrit une grammaire DCG pour cela et je suis en train de le faire me donner cette suite.
est ici la grammaire, si nécessaire:
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, []).
Merci pour toute aide.
Peut-être ce serait bien de fournir la grammaire? –
Je n'ai pas trouvé cela nécessaire, car la grammaire gère bien plus de cas que celui-ci, mais je vais le mettre de toute façon. – CpCd0y
Pourquoi 'ABCABCAB' aboutirait-il à' 3 * (ABC) '? Et que voudriez-vous que «AAABBBAAABBB» aboutisse? – lurker