gpt4 book ai didi

Haskell 测验 : a simple function

转载 作者:行者123 更新时间:2023-12-02 20:31:51 28 4
gpt4 key购买 nike

我不是 Haskell 程序员,但我对以下问题感到好奇。

非正式函数规范:

令 MapProduct 为一个函数,它采用名为 F 的函数和多个列表。它返回一个列表,其中包含使用每个可能组合中每个列表中的一个参数调用 F 的结果。

示例:

使用 F 作为一个函数调用 MapProduct,该函数仅返回其参数列表和两个列表。其中一个列表包含整数 1 和 2,另一个列表包含字符串“a”和“b”。它应该返回一个包含以下列表的列表:1 和“a”、1 和“b”、2 和“a”、2 和“b”。

问题:

  • MapProduct 是如何实现的?
  • 函数的类型是什么? F的类型是什么?
  • 仅通过查看函数的类型就能猜出该函数的作用吗?
  • 你能处理非同质列表作为输入吗? (例如,其中一个输入列表中的 1 和“a”)
  • 实现 MapProduct 需要引入哪些额外限制(如果有)?

最佳答案

  • MapProduct 是如何实现的?

.

Prelude> :m + Control.Applicative
Prelude Control.Applicative> (,,) <$> [1,2,3] <*> ["a","b","c"] <*> [0.8, 1.2, 4.4]
[(1,"a",0.8),(1,"a",1.2),...,(3,"c",4.4)]
  • 函数的类型是什么? F的类型是什么?

F 的类型取决于您要应用的列表。 <$>这是fmap ,和 (<*>) :: f(a->b) -> f a -> f b 哪里f = []在这里。

  • Can you handle inhomogeneous lists as input? (e.g. 1 and "a" in one of the input lists)

不存在异构列表这样的东西。但你可以simulate a heterogeneous list for a specific context with existential types 。然后就可以用上面的方法来做MapProduct了。

*Main Control.Applicative> :i SB
data ShowBox where
SB :: forall s. (Show s) => s -> ShowBox
-- Defined at v.hs:1:35-36
*Main Control.Applicative> [SB 2, SB "a", SB 6.4]
[2,"a",6.4]
*Main Control.Applicative> (,) <$> [SB 2, SB "a", SB 6.4] <*> [SB 'z', SB 44]
[(2,'z'),(2,44),("a",'z'),("a",44),(6.4,'z'),(6.4,44)]

关于Haskell 测验 : a simple function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2500770/

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