这个函数的类型是什么?
what is the type of this function?
我有 2 个练习要完成,第一个应该从 2 个列表创建元组,完成了。 我的疑惑在第二个练习上
Input
createlist [1,2] ['a','b','c']
Output
[[(1,'a'),(1,'b'),(1,'c')],[(2,'a'),(2,'b'),(2,'c')]]
在第二次练习时,他们问我函数的类型 f
:
createlist l1 l2 = map (f l2) l1
where f l x = ...
据我理解,这里的f函数只接收一个列表(l2),为什么f函数中有2个参数吼叫?
编辑
谢谢大家的见解,我已经开始工作了。
这里是:
linhaz :: [a] -> [b] -> [[(a,b)]]
linhaz [] _ = []
linhaz _ [] = []
linhaz l1 l2 = map (f l2) l1
where
f [] x = []
f l x = (x,head l):(f (tail l) x)
传递给map的函数只能接受一个参数。但是,可以部分应用具有更多参数的函数(或 curried),在这种情况下,它 returns 一个仅采用您未提供的参数的新函数。
所以如果 f 是一个有 2 个参数的函数(我们称它们为 a 和 b),那么 (f l2)
returns 一个新函数,其中 a 已经设置为 'l2' 所以你唯一需要应用的是 b 的值。
所以f是一个二元函数,我们把它转换成一个单元函数传给map。
我有 2 个练习要完成,第一个应该从 2 个列表创建元组,完成了。 我的疑惑在第二个练习上
Input
createlist [1,2] ['a','b','c']
Output
[[(1,'a'),(1,'b'),(1,'c')],[(2,'a'),(2,'b'),(2,'c')]]
在第二次练习时,他们问我函数的类型 f
:
createlist l1 l2 = map (f l2) l1
where f l x = ...
据我理解,这里的f函数只接收一个列表(l2),为什么f函数中有2个参数吼叫?
编辑
谢谢大家的见解,我已经开始工作了。
这里是:
linhaz :: [a] -> [b] -> [[(a,b)]]
linhaz [] _ = []
linhaz _ [] = []
linhaz l1 l2 = map (f l2) l1
where
f [] x = []
f l x = (x,head l):(f (tail l) x)
传递给map的函数只能接受一个参数。但是,可以部分应用具有更多参数的函数(或 curried),在这种情况下,它 returns 一个仅采用您未提供的参数的新函数。
所以如果 f 是一个有 2 个参数的函数(我们称它们为 a 和 b),那么 (f l2)
returns 一个新函数,其中 a 已经设置为 'l2' 所以你唯一需要应用的是 b 的值。
所以f是一个二元函数,我们把它转换成一个单元函数传给map。