定義
listCheck :: [[Char]] -> [[Char]] -> Bool函式決定第一個引數的單詞串列是否包含也在第二個引數的串列中的單詞。我們可以假設兩個串列都只包含小寫字母。如果至少有一個引數是空串列,則回傳
False。例如:
listCheck ["hey", "hello", "hi"] ["whatsup", "hi"] == TruelistCheck ["hey", "hello", "hi"] ["whatsup"] == False
到目前為止,我已經嘗試過:
listCheck [] _ = False
listCheck _ [] = False
listCheck (x:xs) [y]
| x == y = True
| otherwise = listCheck (xs) [y]
這符合我的預期。它只檢查第二個引數的第一個元素(如果第二個串列只有一個元素,它總是回傳正確的值,所以至少我是對的)。我不知道如何為第二個串列的其余元素實作遞回。
uj5u.com熱心網友回復:
listCheck :: [[Char]] -> [[Char]] -> Bool
listCheck [] _ = False
listCheck (x:xs) ys = go x ys || listCheck xs ys where
go _ [] = False
go x (y:ys)
| x == y = True
| otherwise = go x ys
我們使用輔助函式go將一個串列中的一個元素與另一個串列中的所有元素進行比較。如果x在串列中找不到元素ys,我們會嘗試xson的其余部分ys。||保證該函式在找到匹配項后立即回傳,而不檢查其余部分。最后,如果xs筋疲力盡,我們可以確定沒有匹配并回傳False。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/349174.html
