我有一个带有函数的列表和另一个带有“arguments”的列表,用于创建一个新列表,其中列表中的每个元素都映射到另一个列表的另一个元素。 (apply :: Ord u => [v-> u] - > [v] - > [u]) 例如,
apply [(^2),(^3),(^4),(2^)] [10] = [100,1000,1024,10000]. or
apply [reverse,(++"ing"),reverse.(++"ing"),(++"ing").reverse] ["play","do"] = ["doing","gniod","gniyalp","od","oding","playing","yalp","yalping"]..
我能做什么,因为我在哈克尔的第一步......
答案 0 :(得分:4)
让我们看看你的第一个清单:
[(^2),(^3),(^4),(2^)]
它的类型是xs :: Integral a => [a -> a]
现在您要将其应用于列表[10]
。您想要的是恰当的应用函数<*>
,其类型为Applicative f => f (a -> b) -> f a -> f b
:
λ> import Control.Applicative
λ> let xs = [(^2),(^3),(^4),(2^)]
λ> xs <*> [10]
[100,1000,10000,1024]
您可以计算出类型,看看它们是如何组合在一起的。您的第二个示例似乎不正确,因为您没有将任何第二个参数传递给apply
函数。我建议你开始阅读LYAH以进一步巩固这些概念。