【发布时间】:2015-12-09 18:43:15
【问题描述】:
Haskell 中是否有内置或惯用的方法来“解包”列表的元素并将它们视为函数的单独参数?
例如,如果我有 f :: a -> b -> c -> d -> e 是否有类似的紧凑的东西
f (unlist x)
完成
let x = [1,2,3,4] in f (x!!0) (x!!1) (x!!2) (x!!3)
或者至少是一种不那么“喧哗”(!! 重复次数过多)的方式来解压缩一个已知长度的列表(在这种情况下,它可以用作函数的参数)。
基本上我正在寻找的东西类似于 Sequence@@ 在 Mathematica 中所做的:
f[Sequence@@{1, 2, 3, 4}]
【问题讨论】:
-
我认为这不会在 Haskell 的类型系统中进行类型检查。可能有
unlist1、unlist2、unlist3等变体。在这种情况下,unlist3 f [a, b, c] = f a b c并使用unlist3 f x或使用中缀看起来像一个函数“调用”。 -
有a trick说服类型系统让你编写多变量函数。它是相对重要且重量级的,因此您不会经常看到它。最著名的用例是
Text.Printf。
标签: haskell syntax functional-programming parameter-passing