我試圖創建一個函式來確定串列串列是否有一個空串列。但是到目前為止,我似乎沒有找到任何運氣。到目前為止,我已經嘗試使用:
hasEmpty (x:xs) = if null x then True else False
但是,如果第一個串列為空,則僅回傳 true。我也試過:
hasEmpty (x:xs) = if null x || null xs then True else False
但它產生相同的結果。我也嘗試過使用any和elem但我無法讓它作業。我真的很難過。任何幫助將非常感激
uj5u.com熱心網友回復:
的型別any是any :: Foldable t => (a -> Bool) -> t a -> Bool(使用:t any)來得到這個。
有兩種說法:
- 第一個引數是一個函式,它接受一個值并回傳一個布林值,例如
null - 第二個引數是可折疊的,例如串列
因此,我們可以簡單地any null在串列中使用。
lst = [[1],[],[3]]
lst2 = [[1],[3],[2]]
any null lst -- returns True
any null lst2 -- returns False
uj5u.com熱心網友回復:
遞回總是有一個基本情況。當您處理串列時,它是一個空串列。如果我們嘗試anyNull在一個空串列上運行一個函式,它應該回傳 false。
anyNull :: [a] -> Bool
anyNull [] = False
但是我們還需要匹配非空串列并收斂到基本情況。這是通過遞回呼叫串列尾部的函式來完成的。幸運的是,模式匹配可以很容易地判斷第一個元素是否為空串列,然后處理它不為空的情況。
anyNull :: [a] -> Bool
anyNull [] = False
anyNull ([]:_) = True
anyNull (_:xs) = anyNull xs
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517146.html
標籤:列表哈斯克尔
