Por que o Erlang fornece ordenação embutida (classificação) dos tipos básicos de dados?

5

Em Erlang, uma ordem dos tipos básicos de dados embutidos foi estabelecida:

number < atom < reference < fun < port < pid < tuple < list < bit string

Isso significa que é possível classificar uma lista com diversos tipos de dados diferentes. ( [1, 2, 'foo', 42, {3}, 1] se torna [1, 1, 2, 42, {3}, 'foo'] )

No entanto, parece muito contra-intuitivo para mim ter esse comportamento definido: Normalmente, quando lida com um enumerável que tem vários tipos diferentes de dados, eu usaria uma função personalizada para que a ordem seja exatamente como eu quero.

Eu esperaria que um número não pudesse ser comparado (em ordem) com ou seja, strings. Em muitas outras linguagens de programação, isso é verdade e causará um erro.

Por que o Erlang fornece essa ordem dos tipos básicos de dados?

    
por Qqwy 13.05.2016 / 07:50
fonte

1 resposta

7

Citando Joe Armstrong (grifo meu):

The original reason was that there should be a defined total order over all terms (why? - so that we could write generic sorting algorithms that could order any terms).

The actual order was based on the idea of "complexity" an integer is "simpler" than an atom. a tuple is simpler than a list and so on..

There was no real definition of "simpler" it was more or less the size that an object took in memory (by which measure [], should have been smallest, but is not :-).

The actual order is not important - but that a total ordering is well defined is important.

/Joe

    
por 13.05.2016 / 09:42
fonte