Haskell中带参数的函数

Haskell中带参数的函数,haskell,Haskell,我正在尝试编写一些在haskell中具有参数的函数 例如:我创建了一个包含各种颜色的列表,但我希望函数只从列表中获取橙色,如何在函数中指定此颜色 getColor :: a -> a getColor = orange 您需要一个函数,该函数接受多种颜色的列表并返回单一颜色(可能是您自己选择的)。您应该从表示颜色的数据类型开始 data Colour = Red | Orange | Yellow | Green | Blue 现在,您需要一个具有以下类型的函数getcolor get

我正在尝试编写一些在haskell中具有参数的函数

例如:我创建了一个包含各种颜色的列表,但我希望函数只从列表中获取橙色,如何在函数中指定此颜色

getColor :: a -> a
getColor = orange

您需要一个函数,该函数接受多种颜色的列表并返回单一颜色(可能是您自己选择的)。您应该从表示颜色的数据类型开始

data Colour = Red | Orange | Yellow | Green | Blue
现在,您需要一个具有以下类型的函数
getcolor

getColour :: Colour -> [Colour] -> Colour
它获取
颜色
颜色列表
,并从列表中选择所需的颜色。但是,列表可以为空,或者列表可能不包含您想要的颜色!在这种情况下,
getcolor
将返回什么

在Haskell中,我们使用
Maybe
处理一个可能不会返回结果的函数。新类型的
getcolor

getColour :: Colour -> [Colour] -> Maybe Colour
这意味着
getcolor
将返回
Nothing
,或
Just color
,其中
color
来自列表

最后,我要提到有几种方法可以实际编写
getcolor
的主体,使用模式匹配和显式递归,或者使用Haskell的
Prelude
中的标准库函数。我想你是哈斯克尔的新手,所以我推荐前者。以下是一些让您开始学习的代码:

getColour _      []     = Nothing
getColour colour (x:xs) = ...

这是否足以帮助您自己编写
getcolor

能否将列表添加到代码块中?这可能有助于了解问题是什么。我没有列出问题的代码。问题的关键是你说getColor应该有类型
a->a
,但是你用类型
a
声明它。您应该将类型更改为a,或者将函数声明更新为
getColor\u=orange
以接受任意颜色(根据您的类型声明
a->a
)并返回橙色。这有帮助吗?我会先编写代码来列出清单。在这之后,如何提取颜色将变得更加清晰。从决定您希望代码完成什么开始,从头到尾。如果你想写一个函数,你需要准确地决定你要给这个函数什么,以及你想要它给你什么。您可能希望编写一个增量函数,该函数接受一个整数并给出下一个整数。或者,您可能希望编写一个head函数,该函数接受至少包含一个元素的列表,并为您提供列表的第一个元素。无论你想做什么,你都必须明确。