相关疑难解决方法(0)

在OCaml中懒惰的"n选择k"

作为枚举集合的更大问题的一部分,我需要编写一个OCaml函数'choose',它接受一个列表并输出作为由该列表的元素组成的所有可能的大小为k的序列的列表(不重复序列,可以通过排列获得彼此).它们放在结束列表中的顺序无关紧要.

例如,

choose 2 [1;2;3;4] = [[1;2];[1;3];[1;4];[2;3];[2;4];[3;4]]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

我想让整个事情变得懒惰,输出一个懒惰的列表,但是如果你有一个严格的解决方案,那也将非常有用.

ocaml functional-programming lazy-evaluation list-manipulation

8
推荐指数
2
解决办法
2224
查看次数

无限列表的笛卡儿积分haskell

我有一个有限列表的函数

> kart :: [a] -> [b] -> [(a,b)]
> kart xs ys = [(x,y) | x <- xs, y <- ys]
Run Code Online (Sandbox Code Playgroud)

但如何为无限列表实现它?我听说过Cantor和集合理论......

我也发现了一个类似的功能

> genFromPair (e1, e2) = [x*e1 + y*e2 | x <- [0..], y <- [0..]]
Run Code Online (Sandbox Code Playgroud)

但是我不确定它是否有帮助,因为拥抱只会在没有中断的情况下发出对.

感谢帮助.

haskell

4
推荐指数
1
解决办法
1000
查看次数