我正在编写一个代码,用于重复排列从k值中选择的n个元素 . 所以我得到的集合的基数应该有k ^ n个元素 . 在Haskell中,它相当容易 . 例如,人们可以写:
import Control.Monad(replicateM)main = mapM_ print(replicateM 2 [1,2,3])
然后你会得到一个列表:
[1,1] [1,2] [1,3] [2,1] [2,2] [2,3] [3,1] [3,2] [3,3]
但在标准ML上,我不知道该怎么做 .
我试过这个:
fun combs_with_rep(k,xxs)= case(k,xxs)of(0,)=> [[]]
|(,[])=> []
|(k,x :: xs)=> List.map(fn ys => x :: ys)(combs_with_rep((k-1),xxs))@ combs_with_rep(k,xs)
但列表不完整,我不知道为什么....
有没有像Haskell那样的模拟编码做同样的事情?或者我应该如何修复我的sml代码?
任何帮助表示赞赏!
1 回答
只需转换monadic代码:
现在你可以把它翻译成ML .