Possible en double:
Iterating through a String and replacing single chars with substrings in haskellnotation pour un appel récursif sur le type défini par l'utilisateur
Je suis en train de mettre en œuvre une fonction qui ressemble à une chaîne ([Chars]) et les chèques pour chaque lettre si cette lettre doit être remplacée par une autre chaîne. Par exemple, nous pourrions avoir un [Chars] composé de "XYF" et des règles qui disent "X = HYHY", "Y = OO", alors notre sortie devrait devenir "HYHYOOF".
Je veux utiliser les deux types que je définis ci-après:
type Letters = [Char]
data Rule = Rule Char Letters deriving Show
Mon idée est que la fonction devrait ressembler à quelque chose comme ce qui suit ci-dessous à l'aide des gardes. Le problème est cependant que je ne peux trouver aucune information sur la façon dont l'appel récursif devrait ressembler quand je veux parcourir toutes mes règles pour voir si l'un d'entre eux correspond à la lettre x actuelle. J'espère que n'importe qui peut donner quelques conseils sur comment la notation va.
apply :: Letters -> [Rule] -> Letters
apply _ _ = []
apply (x:xs) (Rule t r:rs)
| x /= t = apply x (Rule t rs)
| x == t = r++rs:x
| otherwise =
Je pensais que la fonction d'assistance n'était pas nécessaire car vous pouviez simplement vérifier si x était égal à t (dans mon exemple), mais je vois où va votre méthode. merci pour la contribution. – John
Le problème est que vous avez deux listes à parcourir, la liste des lettres et les règles. Faire cela dans la même fonction n'est pas agréable, puisque vous devez rétablir l'ensemble des règles pour la lettre suivante, vous aurez besoin de trois arguments. Séparer les deux traversées donne un code plus court, plus facile à comprendre et à maintenir. –