Donc, je lisais un livre, "Introduction à la théorie du langage formel" et il décrit une langue L(G) = {a^n ++ b^n | n > 0}
.Langage équilibré, 2 symboles non-terminaux, compréhension de la liste
Il a les productions suivantes:
S -> ab | aSb
Et produirait la langue suivante:
a, ab, aabb, aaabbb, ...
Je me demandais comment je pouvais utiliser la compréhension de la liste de Haskell pour créer cette langue. Je sais que je peux faire la compréhension de la liste avec des cordes, mais je suis plutôt débutant et je ne savais pas comment je pourrais obtenir une liste infinie comme je le voudrais de ces cordes.
J'imagine quelque chose comme:
[ x ++ y | x <- ["a","aa",..] y <- ["b","bb",..]]
Cela ne fonctionne pas exactement comme vous le pensez. Que diriez-vous de '[répliquer n 'a' ++ répliquer n 'b' | n <- [1 ..]] '? Cela semble être la traduction la plus fidèle ... – Alec
"a" ne fait pas partie de cette langue. –