J'écris un programme d'inversion de liste pour haskell.Erreur d'inversion de liste Haskell
J'ai eu l'idée de l'inversion de la liste et qui a conduit au code suivant:
myreverse list1
| list1 == [] = list1
| otherwise = (myreverse(tail list1)):(head list1)
Malheureusement, les résultats de code ci-dessus dans l'erreur suivante:
Occurs check: cannot construct the infinite type: a = [[a]]
Expected type: [[a]]
Inferred type: a
In the second argument of '(:)', namely '(head list1)'
In the expression: (myreverse(tail list1)):(head list1)
PS: I obtenir le même genre d'erreur quand je l'exécute sur un extrait que j'ai écrit appelé mylast codé ci-dessous:
mylast list
| list == [] = []
| otherwise = mylast_helper(head list1)(tail list1)
mylast_helper item list2
| list2 == [] = item
| otherwise = mylast_helper(head list2)(tail list2)
Une erreur se produit dans le cas contraire de l'assistant récursif.
EDIT: Merci pour toutes les entrées, je suppose que j'ai oublié de mentionner que les contraintes de la question interdisent l'utilisation de l'opérateur ++. Je garderai cela à l'esprit pour les futures questions que je vais créer.
Cheers, -Zigu
Concat fonctionne sur deux listes, et head list1 est un élément unique, cependant ... – yatima2975
Aussi cela fonctionnerait en O (n^2) fois s'il compilé –
@yatima qui était une faute de frappe , fixe, merci de le signaler. @pelotom en regardant la question et en essayant de jauger la capacité du demandeur, je dirais que même si ce n'est peut-être pas efficace, il est approprié ... – Jon