gpt4 book ai didi

Haskell:有时返回函数的函数

转载 作者:行者123 更新时间:2023-12-02 17:09:36 25 4
gpt4 key购买 nike

如何编写一个可以返回值或另一个函数的函数?

例如:

Function Foo (x)
If X = 0 Return "Done"
Else Return a Function that calls Foo(x-1)

最佳答案

在 haskell 中,函数的返回类型只能取决于其参数的类型,并且对于具有多态返回类型的函数,还取决于返回值的使用方式。特别是函数的返回类型不能依赖于参数的值。

换句话说:你不能直接做你想做的事。如果您想返回两种类型之一,通常可以使用 Either a b 类型,该类型定义为 data Either a b = Left a | Right b,它允许您返回包装在 Left 中的 a 类型的值或包装在 Left 中的 b 类型的值正确。然后,您可以使用模式匹配以类型安全的方式检索值。

但是,由于在这种情况下,b 的类型必须是无限的,因此这是行不通的,您必须为此定义自己的包装器类型。就像这样:

data MyResult = Str String | Fun ( () -> MyResult)
foo 0 = Str "done"
foo x = Fun (\ () -> foo (x-1))

foo 现在的类型为 Num a => a -> MyResult。然而,每次调用 foo 时,您都必须进行模式匹配,以查看是否返回了内部包含字符串的 Str 或内部包含函数的 Fun。

另请注意,如果您想返回一个函数而不是一个值以延迟执行,这在 haskell 中没有意义,因为它很懒,并且通常在使用之前不会对其进行评估。

关于Haskell:有时返回函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3173369/

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