oro*_*ome 6 syntax haskell functional-programming parameter-passing
Haskell中是否有内置或惯用的方式来“解压缩”列表中的元素并将其视为函数的单独参数?
例如,如果我f :: a -> b -> c -> d -> e
有一些紧凑的东西,例如
f (unlist x)
Run Code Online (Sandbox Code Playgroud)
完成
let x = [1,2,3,4] in f (x!!0) (x!!1) (x!!2) (x!!3)
Run Code Online (Sandbox Code Playgroud)
或至少以一种“减少”(!!
重复次数过多)的方式来解压缩通常已知长度的列表(这样,在这种情况下,它可以用作函数的参数)。
本质上,我正在寻找的东西类似于Sequence@@
Mathematica:
f[Sequence@@{1, 2, 3, 4}]
Run Code Online (Sandbox Code Playgroud)
它在Haskell类型系统中不是特别有用:
鉴于此,使用元组比使用列表更有意义,因为它避免了两个问题。标准库包括uncurry
针对2个参数的函数执行此操作的类,您可以uncurry3
类推定义,等等:
uncurry3 :: (a -> b -> c -> d) -> ((a, b, c) -> d)
uncurry3 f (a, b, c) = f a b c
Run Code Online (Sandbox Code Playgroud)