Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯克尔:';makeNtuple';功能?_Haskell_Tuples - Fatal编程技术网

Haskell 哈斯克尔:';makeNtuple';功能?

Haskell 哈斯克尔:';makeNtuple';功能?,haskell,tuples,Haskell,Tuples,Haskell中是否有一个或多个函数接受n个参数并返回n元组?例如: make3tuple:: a -> a -> a -> (a,a,a) make3tuple a b c = (a,b,c) type RandomState a = State StdGen a [...] getTwoRandoms = liftM2 (,) getRandom getRandom get3Randoms = liftM3 make3tuple getRandom getRandom g

Haskell中是否有一个或多个函数接受n个参数并返回n元组?例如:

make3tuple:: a -> a -> a -> (a,a,a)
make3tuple a b c = (a,b,c)
type RandomState a = State StdGen a
[...]
getTwoRandoms = liftM2 (,) getRandom getRandom
get3Randoms = liftM3 make3tuple getRandom getRandom getRandom
ie:像逗号,但有两个以上的参数。显然,make3tuple可以完成这项工作,但我觉得必须有一种内置的方法来完成这项工作,而我没有找到它,或者错过了使用其他无处不在的功能的方法

FWIW,使用liftM3(或更高版本)时会出现这种情况。例如:

make3tuple:: a -> a -> a -> (a,a,a)
make3tuple a b c = (a,b,c)
type RandomState a = State StdGen a
[...]
getTwoRandoms = liftM2 (,) getRandom getRandom
get3Randoms = liftM3 make3tuple getRandom getRandom getRandom
谢谢

是的

(,,) :: a -> b -> c -> (a, b, c)
(,,,) :: a -> b -> c -> d -> (a, b, c, d)
等等

所以你可以写
liftM3(,)getRandom getRandom


Haskell编译器提供的函数最多可以达到一定的大小(我认为保证是15个元组)

而不是像
makeNtuple::Int->a->a->……->>(a,a,…)
注意,它甚至在类型语言中似乎是不可表达的。如果您同意元组具有同质类型,那么可以使用


使用名为
TupleSections
的扩展,您甚至可以部分应用此功能。所以
(,1,2)
等于
\xy->(x,1,y,2)
@amindfv哈哈哈。。。我显然没有想到逗号可以这样使用。谢谢@格维德曼:请注意,这些是它们自己的操作符:
(,)
(,)(,)
完全不同。如果你试着编写它们,你会得到这样的结果:
(,)(,)34)5
,这就是
((3,4),5
@amindfv:有趣的是,这让我看到了Tuple.hs,它们是在哪里定义的。你猜对了,我认为这是一种神秘的逗号合成方法,而实际上这些函数是以普通方式定义的单个函数。Thanks@gwideman:我猜是因为我曾经做过同样的假设:)很公平。。。事实上,我并不期待一个具有可变长度arg list的通用makeNtuple。这可以通过列表和zip来实现。顺便说一句,有一个完善的黑客库: