2016-04-06 18 views
0
Prelude> find odd [2,4,7,9,11] 
Just 7 

Tüm tek sayıların olduğu gibi bunun [7,9,11] değerini döndürmesini beklerim. Neden find, Just 7'u döndürüyor?Haskell'in neden her zaman sadece bir elementi buluyor?

Beklediklerimi geri döndürmek için odd işlevini anlatabileceğim herhangi bir yol var mı?

+2

Bu gibi durumlarda size ihtiyacı için işlev türünü anlamaya gerekir ardından [hoogle] (https://www.haskell.org/hoogle) sorun. Bu görev için arama parametresi ** (a -> Bool) -> [a] -> [a] **. – ArthurVard

cevap

3

Sen filter değil find aradığınız filter

> filter odd [2,4,7,9,11] 
[7, 9, 11] 
3

kullanın. find'un işi, ilkini bulmak ya da bir tane olmadığını bilmek. filter'un işi, hepsinin bir listesini yapmaktır. documentation itibaren

6

:

find işlevi bir yüklemi ve bir liste alır ve böyle bir unsuru varsa yüklemi veya Nothing eşleşen listedeki ilk elemanını döndürür. yerine

Kullanım filter:

> filter odd [2,4,7,9,11] 
[7, 9, 11] 
İlgili konular