首页 文章

列表中的isContain函数

提问于
浏览
-3

我试图在Haskell中实现 isContain 函数,以下是我的代码

isContain :: Char -> Bool

isContain  x = if x== b then True else isContain   x where (b:bs) = ['a'..'z']

我的代码无限,因为 b 的值永远不会改变 . 如何更改它以便更改 b 的值 . 请让我知道如何迭代 .

我有其他想法来实现这个功能,但我想这样做是为了学习目的 .

2 回答

  • 3

    您确实可以通过实施来解决您的问题

    isContain :: [Char] -> Char -> Bool
    isContain []     _ = False
    isContain (b:bs) x = ...
    

    传递一个字符列表作为参数,并在每一步从列表顶部删除一个字符 . 但你不需要 .

    类型 Char 具有类 Ord 的实例,这意味着您可以比较字符 . 所以你需要的是检查 x 是否在 az 之间

    isContain :: Char -> Bool     
    isContain  x = (x>='a') && (x<='z')
    

    最后请注意,此函数已存在于模块 Data.Char 中 .

    isAsciiLower :: Char -> Bool
    
  • 1

    您需要将更新的列表(其尾部)传递给递归调用 . 如果要保留现有签名,仍可以在 where 子句中定义嵌套函数:

    contains x = cont ['a'..'z'] 
      where cont [] = False
            cont (b:bs) = if x == b then True else cont bs
    

相关问题