2009-08-26 6 views

Répondre

19
removeall val list = filter (/= val) list 
+8

ou alternativement: removeall val = filtre (/ = val) – Peter

2

Les travaux suivants ainsi

removeall val list = [ x | x <- list, x /= val ] 
24
removeall = filter . (/=) 
1

Ceci est juste une ré-écriture de la vôtre qui enlève la tête et les appels de fonction arrière.

removeall val [] = [] 
removeall val (x:xs) = if (x == val) 
         then removeall val xs 
         else x:removeall val xs 

Personnellement je préfère les

removeall = filter . (/=) 

celle donnée par les autres, mais qui pourrait être plus difficile pour un débutant de comprendre rapidement.

+0

Le 'filtre. (/ =) 'version m'a fait arrêter et réfléchir un peu, mais je pensais que Peter un peu plus pointu' removeall val = filtre (/ = val) 'était tout à fait clair. – Chuck

+0

La chose la plus difficile à propos de votre deuxième solution (et Haskell en général) est que la bibliothèque standard est énorme, donc les débutants ne connaissent pas toutes les primitives (comme map, mapAccumL, filter, foldl, zip, etc.) – Peter

+2

@Peter, it Ce n'était pas ma suggestion mais plutôt celle d'Edward Kmett. J'adore la deuxième solution pour sa nature concise mais oui si j'étais débutant j'irais pour quelque chose dans le sens du premier. Et oui je suis d'accord, la bibliothèque standard est énorme mais une fois que vous en savez plus, vous êtes prêt à partir :) –

Questions connexes