Also, "unique" permutations require a notion of equality, and which is
hard to define in general (classic essay is [1], about Common Lisp,
but applies to Julia mutatis mutandis). At least Julia has bits types
for numbers, which makes life a bit easier.

Whether one picks is, isequal, or == for comparison, it easy to come up
with cases which go against user expectations (at least for some
users). For example, given 

type Foo end
type Bar x end

what should be the unique permutations of

[0.0,-0.0,NaN,NaN,Foo(),Foo(),Bar(NaN),Bar(NaN)]

?

Best,

Tamas

[1] http://www.nhplace.com/kent/PS/EQUAL.html

On Sun, Nov 22 2015, Ratan Sur <ratan.r....@gmail.com> wrote:

> I think julia more than other languages has a tendency to stick with
> mathematical consistency over some user preferences, which is good. For
> that reason, I would be in favor of permutations remaining as is but having
> multiset_permutations renamed to something more intuitive, like
> uniqueperms, or unique_permutations.
>
> On Sun, Nov 22, 2015 at 2:16 AM Glen O <gjo1...@gmail.com> wrote:
>
>> While it is true that an interpretation of arrays is multisets, that's not
>> the only reasonable interpretation. And while the strict interpretation of
>> "permutations" suggests it should include duplicates, you have to consider
>> what the user would most likely expect it to do. Most would think that a
>> list of the permutations would include unique permutations only.
>>
>> So perhaps both functionalities should be available in the same function
>> with a keyword argument. At the very least, the description of the function
>> should directly inform the user that it's going to give duplicate
>> permutations if the array contains repeat elements.
>>
>> On Saturday, 21 November 2015 04:24:51 UTC+10, Jiahao Chen wrote:
>>>
>>> The current behavior of permutations is correct and should not be
>>> changed. Combinatorially, arrays are multisets, not sets, since they allow
>>> for duplicate entries, so it is correct to produce what look like identical
>>> permutations. The redundancy is important for operations that can be
>>> expressed as sums over all permutations.
>>>
>>> Combinatorics.jl currently provides multiset_permutations for generating
>>> only distinct permutations:
>>>
>>>
>>> https://github.com/JuliaLang/Combinatorics.jl/blob/3c08c9af9ebeaa54589e939c0cf2e652ef4ca6a0/test/permutations.jl#L24-L25
>>>
>>

Reply via email to