簡體   English   中英

如果 x 在列表中,則返回 true,否則返回 False(遞歸)

[英]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

解釋:

  • 如果列表為空:沒有 3
  • 如果列表不為空:
    1. 如果 head 是 3,那么我們有 3
    2. 否則我們應該檢查列表的 rest,所以“3 在列表中”的答案等同於“x 在 xs 中”。

如果您接受一點更改,我可以建議使用 OR 實施(以及惰性評估的幫助)。

func :: [Int] -> Bool
func [] = False
func (x:xs) = x==3 || func xs

它實際上與上面的代碼相同,但行數更少。

  • 如果 head 為 3,則返回 True。
  • 如果 head 不是 3,請檢查列表的 rest。

最后給大家介紹一下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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM