gpt4 book ai didi

haskell - 如何声明函数(可能是类型误解)

转载 作者:行者123 更新时间:2023-12-02 16:21:54 25 4
gpt4 key购买 nike

我需要一个功能如下:

some :: (Int, Maybe Int) -> Int
some a b
| b == Nothing = 0
| otherwise = a + b

用例:

some (2,Just 1)
some (3,Nothing)
map some [(2, Just 1), (3,Nothing)]

但是我的代码引发了错误:

The equation(s) for `some' have two arguments,
but its type `(Int, Maybe Int) -> Int' has only one

我听不懂。

提前致谢。

最佳答案

当你写的时候

foo x y = ...

这是柯里化(Currying)函数的表示法,其类型如下:

foo :: a -> b -> c

您已声明您的函数需要一个元组,因此您必须编写它:

some :: (Int, Maybe Int) -> Int
some (x, y) = ...

但是 Haskell 约定通常采用前一种柯里化(Currying)形式的参数。看到函数将元组作为参数的情况非常罕见。

对于问题的另一部分,您可能想用模式匹配来表达它。你可以说:

foo :: Maybe Int -> Int
foo Nothing = 0
foo (Just x) = x + 1

将OP的问题概括为留给读者的练习。

关于haskell - 如何声明函数(可能是类型误解),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4365537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com