Haskell 哈斯克尔咖喱地图

Haskell 哈斯克尔咖喱地图,haskell,functional-programming,Haskell,Functional Programming,所以我知道你可以: > f = map (+1) > f [1,2,3] [2,3,4] 但是,如果您: > g = map (+) [1,2,3] > :t g g :: Num a => [a -> a] 我不知道如何使用g。它的输入和输出是什么?(+)::numa=>a->a->a;它接受一个数字并返回一个增加其参数的函数 map(+)[1,2,3]则相当于[(+1),(+2),(+3)]。使用此类函数列表的一种方法是使用[]的Applicative

所以我知道你可以:

> f = map (+1)
> f [1,2,3]
[2,3,4]
但是,如果您:

> g = map (+) [1,2,3]
> :t g
g :: Num a => [a -> a]
我不知道如何使用g。它的输入和输出是什么?

(+)::numa=>a->a->a
;它接受一个数字并返回一个增加其参数的函数

map(+)[1,2,3]
则相当于
[(+1),(+2),(+3)]
。使用此类函数列表的一种方法是使用
[]
Applicative
实例,它允许您将列表中的每个函数应用于另一个列表中的每个值。例如:

[(+ 1), (+ 2), (+ 3)] <*> [5] == [6, 7, 8]
[(+1),(+2),(+3)][5]=[6,7,8]
(+)::numa=>a->a->a
;它接受一个数字并返回一个增加其参数的函数

map(+)[1,2,3]
则相当于
[(+1),(+2),(+3)]
。使用此类函数列表的一种方法是使用
[]
Applicative
实例,它允许您将列表中的每个函数应用于另一个列表中的每个值。例如:

[(+ 1), (+ 2), (+ 3)] <*> [5] == [6, 7, 8]
[(+1),(+2),(+3)][5]=[6,7,8]

例如,可以将列表中的每个元素应用于特定值:

> map (\f -> f 3) g
[4,5,6]
或者,您可以将列表中的每个函数应用于另一个列表相应位置的值:

> zipWith (\f x -> f x) g [30,300,3000]
[31,302,3003]

或者您可以在列表上进行模式匹配,或者在列表理解中使用它,或者使用
(!!)
,或者,或者,或者。。。有无限的可能性。

例如,可以将列表中的每个元素应用于特定的值:

> map (\f -> f 3) g
[4,5,6]
或者,您可以将列表中的每个函数应用于另一个列表相应位置的值:

> zipWith (\f x -> f x) g [30,300,3000]
[31,302,3003]

或者您可以在列表上进行模式匹配,或者在列表理解中使用它,或者使用
(!!)
,或者,或者,或者。。。可能性是无穷的。

这个问题是建立在错误的假设之上的。没有输入或输出
g
不是一个函数。
[a->a]
就是它所说的函数列表。这个问题是基于一个错误的假设。没有输入或输出
g
不是一个函数。
[a->a]
就是它所说的函数列表。