Perché Erlang fornisce ordinamenti (ordinamento) incorporati dei tipi di dati di base?

5

In Erlang è stato stabilito un ordinamento dei tipi di dati di base incorporati:

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

Ciò significa che è possibile ordinare un elenco con una varietà di tipi di dati diversi. ( [1, 2, 'foo', 42, {3}, 1] diventa [1, 1, 2, 42, {3}, 'foo'] )

Tuttavia, mi sembra molto controintuitivo avere questo comportamento definito: solitamente, quando si tratta di un enumerabile che ha più tipi diversi di dati, utilizzerei una funzione personalizzata in modo che l'ordine sia esattamente come voglio.

Mi aspetto che un numero non possa essere confrontato (in ordine) con le stringhe. In molti altri linguaggi di programmazione questo è vero e genererà un errore.

Perché Erlang fornisce questo ordinamento dei tipi di dati di base?

    
posta Qqwy 13.05.2016 - 07:50
fonte

1 risposta

7

Citando Joe Armstrong (enfasi mia):

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

    
risposta data 13.05.2016 - 09:42
fonte

Leggi altre domande sui tag