gpt4 book ai didi

haskell - 如何在 Haskell 中定义返回列表或单个元素的函数?

转载 作者:行者123 更新时间:2023-12-02 18:04:45 25 4
gpt4 key购买 nike

我完全陷入尝试在下面的简单教程中实现此功能 exercise 。它应该将第二个参数应用于最后一个参数,然后将第一个参数应用于整个事物:

multiApp sum     [(1+), (^3), (+2)]      1       ==>  6
multiApp reverse [tail, take 2, reverse] "foo" ==> ["oof","fo","oo"]

由于该函数可以返回单个元素或列表,因此我不知道如何定义它,像这样的开始甚至无法编译:

multiApp :: (β->β) -> [(β->β)] -> β    -> β
multiApp f fs x = f $ map (\i -> i x) fs

最佳答案

您对 f 进行了不必要的限制:您在这里说 f 的类型为 β -> β,但是为什么输入和f 的输出类型需要是相同的类型吗?

您可以概括为:

multiApp :: ([α] -> β) -> [α -> α] -> α -> β
multiApp f fs x = f $ map ($ x) fs

因此,您将列表中的每个函数应用于该值,然后对这些项目的列表调用 f。对于 sum 来说,这将对元素进行求和,而对于 reverse 来说,它将反转列表。

我们实际上可以进一步将其概括为:

multiApp :: ([β] -> γ) -> [α -> β] -> α -> γ
multiApp f fs x = f $ map ($ x) fs

关于haskell - 如何在 Haskell 中定义返回列表或单个元素的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73556711/

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