在Haskell中定义一个函数,如果它是由'a'组成的列表则返回true,否则返回false

use*_*425 4 haskell pattern-matching

我是Haskell的新手,我正在尝试编写一个带有列表并返回bool的函数.

True如果其输入列表是'a'仅包含的列表,则返回,False否则返回.

这是我最好的猜测:

f :: [a] -> Bool

f ('a':[]) = True

f (x:xs) = False
Run Code Online (Sandbox Code Playgroud)

这无法编译并返回:

Couldn't match type `a' with `Char'
  `a' is a rigid type variable bound by
      the type signature for f :: [a] -> Bool at charf.hs:6:1
In the pattern: 'b'
In the pattern: 'b' : []
In an equation for `f': f ('b' : []) = True
Run Code Online (Sandbox Code Playgroud)

我的逻辑错误是什么?

Mat*_*ant 7

f :: [Char] -> Bool
f ['a'] = True
f _ = False
Run Code Online (Sandbox Code Playgroud)

使用模式匹配.您的函数似乎没有处理空列表.此外,您的功能不能像您想要的那样通用,因为它显然需要[Char](或a String).

  • @ user2666425您可以在通用列表上进行模式匹配.你不能假设元素类型.当你在`a`周围加上单引号时,你会说列表必须与`Char`匹配,其值为字符'a'.如果你删除引号,那么`a`将是一个匹配任何类型的变量,你的函数将在任意列表上工作. (3认同)