[英]How can I check that the length of a list of custom data types in Haskell?
[英]How can I pass a list of unknown length to a haskell function?
secondTest :: [(Int, Int)] -> [Int] -> [Int]
secondTest a b = [ x | (m,n) <- a, x <- b, m > 3 && n > 3]
我現在有這段代碼,我想更改它以便在所有給定的 int 都超過 3 時返回 b,無論第一個列表中給出了多少個 int。
我試過這樣的事情:
secondTest :: [Int] -> [Int] -> [Int]
secondTest a b = [ x | m <- a, x <- b, m > 3]
但如果任何int 值大於 3,而不是全部,這將返回一個值。
編輯以顯示預期回報:
secondTest [4,4] [1,2] = [1,2]
secondTest [4,4,4] [1,2] = [1,2]
secondTest [4,1,4] [1,2,9] = Nothing
謝謝
您可以使用all
測試a
的所有元素是否都大於 3:
secondTest :: [Int] -> [Int] -> [Int]
secondTest a b
| all (> 3) a = b
| otherwise = ...
請注意,在otherwise
情況下,我們仍然必須返回一個列表,因此我們不能返回Nothing
。 我們可以返回一個空列表
secondTest a b
| all (> 3) a = b
| otherwise = []
或者我們可以更改 function 的返回類型
secondTest :: [Int] -> [Int] -> Maybe [Int]
secondTest a b
| all (> 3) a = Just b
| otherwise = Nothing
您不能直接使用列表理解來執行此操作。 充其量,您可以使用一個生成<= 3
的元素列表,然后測試它是否為空,反轉邏輯:
secondTest a b
| null [ x | x <- a, x <= 3 ] = Nothing
| otherwise = Just b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.