我正在尝试将功能元组应用于值元组

λ> let foo = ((+1), (*3), ((:)5))  #Each function has type: a -> a

λ> let bar  = (1, 5, [0])          #Each value of the corresponding tuple has type a

如何执行:

toImplement foo bar = ?

这样:

λ> toImplement foo bar
-> (2, 15, [0,5]) # using foo and bar above

您通常如何对任何有效的foo和bar(相同长度)实现此功能?

[我研究了这个问题 ,但是它是针对固定类型实现的。 我需要一个通用的实现]

动机:

我正在尝试高效地折叠。

let acc1 = \x acc -> x*x:acc
let acc2 = (+)
foldr (\x acc -> (acc1 x (fst acc), acc2 x ( snd acc))) ([],0) [1..10]
> ([1,4,9,16,25,36,49,64,81,100],55)

我有2个不同的累加器acc1和acc2,它们遍历列表一次。 我想对任意数量的累加器执行此操作,所有累加器的类型都为a-> b [其中a是列表中元素的类型,b是累加器输出的类型]看起来很笨拙,必须使用fst和snd访问元组:/

#1楼 票数:6 已采纳

如评论中所述,haskell不允许为任意大小的元组实现泛型函数。 因此,您需要为每种尺寸分别实现一个特定的功能。

例如:

toImplement3 :: (b0 -> c0, b1 -> c1, b2 -> c2) -> (b0, b1, b2) -> (c0, c1, c2)
toImplement3 (f1, f2, f3) (a1, a2, a3) = (f1 a1, f2 a2, f3 a3)

  ask by GeneralBecos translate from so

未解决问题?本站智能推荐:

3回复

Haskell-将函数元组应用于值元组?

我有一个代表某个状态的值元组,并希望通过加法(移位)来翻译它。 我的值是 (Int, [Int], Int) 的更长版本,并且我从概念上(但不是字面上)想要这样的东西: 这相当于: 我很高兴使用这种显式函数用法,但想知道是否有使用 Applicative 或 Arrows 或 ... 的更惯用的无点
4回复

在Haskell中将提升函数应用于元组(任意长度)

是否有任何解释为什么提升函数应用于2元组时,仅适用于第2个条目: 另一方面, 任何其他长度的元组都返回错误。 也 返回错误。 在对元组进行操作时是否可以看到f <$>的类型? 这种行为有什么解释吗? Data.Tuple文档非常简短,没有提到如何将函数提升到元组。
1回复

将两个函数应用于元组列表

我有一个元组列表,其中包含以下形式的信息: 我想做的是map此列表以返回每个元组的第一个元素的字符串列表(我有一个函数用carMan (x,_,_,_) = x)做到这一点carMan (x,_,_,_) = x)而且还使用toLower函数,我无法找到一种方法将它们组合在一起,无论是与函数
2回复

如何将部分函数应用于元组列表

这个问题的标题听起来可能有误导性,但是我不确定其他如何解释我要做什么。 我正在尝试不确定的数据结构。 我正在尝试产生一组部分应用运算符和一个元组列表的所有可能组合: 我希望makeTupleList返回类似以下内容的内容: 但我显然做错了,因为我不断收到此错误: 如何获得理想的
1回复

在Haskell中将sqrt应用于元组列表

我做了一个元组列表,我想根据每个元组第二个成员的平方根是否是整数来过滤此列表: 但是每次,我都会收到此错误: 有任何想法吗?
2回复

应用于Haskell中的元组和列表的不同行为

例如, 对于三个示例, <*>显示不同的行为。 怎么了? 为什么在第三种情况下,它需要[Char] -> [Char]而不是[Char] ,就像第一种情况一样。 更重要的是,即使元组中只有[Char] , <*>将它们组合在一起。
2回复

Haskell将2个lambda表达式应用于元组列表

我正在努力理解Haskell中的lambda表达式。 这是问题所在: 我有一个元组列表[(a,b),(c,d),(e,f)...] (可以是任何长度) 我想对列表中的每个元组应用两个函数f1和f2,但是以这样的方式将f1应用于每个元组的第一个元素,而f2应用于每个元组的第二个元素。
1回复

按元组列表的第一个元素分组,然后将功能应用于所有分组的第二个元素[重复]

这个问题已经在这里有了答案: 如何使用Haskell在列表中将相似项目分组? 5个答案 我有一个清单 [(8,2),(3,2),(3,1),(10,2),(10,6)] :: [(Int,Int)] 我想得到一个元组列表,该列表按元组列表的第一个元素分组。 我也想对