![](/img/trans.png)
[英]Scala List.contains(x) return false, but exists(_.== x) returns true
[英]Return true if x is in list else False (Recursion)
我正在編寫一個簡短的遞歸 function 以將列表作為輸入,output 是一個布爾值。 (我是 haskell 初學者)到目前為止,我可以檢測第一個元素是否為 3,但我不確定如何使用遞歸來檢查列表的 rest。
func :: [Int] -> Bool
func [] = False
func (x:xs)
| (x == 3) = True
| otherwise = False
我也是 Haskell 的新手。
通過對您的代碼稍作改動,它可以重寫為
func :: [Int] -> Bool
func [] = False
func (x:xs)
| x == 3 = True
| otherwise = func xs
解釋:
如果您接受一點更改,我可以建議使用 OR 實施(以及惰性評估的幫助)。
func :: [Int] -> Bool
func [] = False
func (x:xs) = x==3 || func xs
它實際上與上面的代碼相同,但行數更少。
最后給大家介紹一下elem
function,它的作用是:獲取一個元素和一個列表,如果a在列表中則返回True,否則返回False。 這正是我們想要的,所以我寫:
containsThree :: [Int] -> Bool
containsThree = elem 3
另請注意,我使用了無點樣式,如果您不熟悉,第二行與以下內容相同:
containsThree xs = elem 3 xs
祝您學習 Haskell 好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.