gpt4 book ai didi

haskell - 如何让函数返回不同的类型

转载 作者:行者123 更新时间:2023-12-03 21:57:41 25 4
gpt4 key购买 nike

所以,我有一个具有多个定义(守卫)的函数,并且根据它匹配的那个,我试图让它返回一个(a,b)或[(a,b)],但是编译器正在抛出错误,因为它们是不同的类型。我试图使用 Either 来解决这个问题,但可能没有正确使用它:P。有什么帮助吗?

最佳答案

Either -- 或与之等效的自定义数据类型 -- 是执行此操作的唯一方法。这是一个愚蠢的例子:

stuff :: Int -> Either (Int,Int) [(Int,Int)]
stuff 0 = Left (0, 0)
stuff n = Right [ (x,x) | x <- [0..n] ]

然后当有人调用这个函数时,他们可以通过模式匹配找出它返回的两种类型中的哪一种:
foo n = case stuff n of
Left (a,b) -> ...
Right pairs -> ...

但是,对您的问题一无所知,一般来说,我建议您多考虑一下您的功能的含义。它需要什么,它返回什么?精确,数学。答案越简单,这个函数就越能顺利地与你的程序的其余部分和 Haskell 的概念一起工作。对我来说,在这样的描述中, Either很少出现。如何统一这两个结果?也许你只是返回单例列表 [(a,b)]而不是 Left (a,b) ,如果这对您的功能有意义。

Haskell 不能很好地处理那些试图太聪明的函数,你可能习惯于 Python 或 jQuery 的类型。保持愚蠢和精确——通过组合这些简单的部分来获得你的复杂性。如果您对此感到好奇,请提出另一个问题,详细说明您的问题、您要完成的工作以及您为什么希望它以这种方式工作。抱歉讲道:-)

关于haskell - 如何让函数返回不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4770910/

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