我必須生成滿足一些要求的所有可能的數字列表。 我知道如何去固定尺寸的鏈條。 僞代碼:Haskell未知大小列表理解
[ [x1,x2,x3]| x1<-[1..5],x2<-[20..30], x2 `basedOn` x1, x3<-[100..110], x3 `basedOn` x1+x2]
其中basedOn是一些布爾過濾器。
但如何做到這一點鏈的長度是在運行時確定的,又名變量?
我爲每個Xn
生成了不同的集合。所以基本上我想要做的是爲X1,X2..Xn
生成集合。然後,我想從X1
挑選一個元素,並選擇從X2
一個元素沒有與X1
然後我想挑一個從X3
不X1
和X2
碰撞等方面Xn
colides。當我有一個結果。我希望它從Xn會議要求中挑選其他人。然後回到Xn-1
再次選擇另一個有效的,然後再回到Xn
並生成所有不再發生碰撞。然後我想回到更深層次等等。這是列表理解所做的事情,但我希望它具有動態大小。
我知道列表compehension是句法糖,所以動態生成它我可能不得不使用單子,但我不知道如何:) 你能幫我在Haskell如何實現這個嗎?
遞歸的幫助。你可能看看http://stackoverflow.com/questions/9658409/haskell-combinations-and-permutation或http://stackoverflow.com/questions/8779765/combinations-of-a-list – phimuemue