2013-01-19 2 views
5

Esistono funzioni di ordinamento standard in SML? La documentazione su Internet è così scarsa che non sono riuscita a trovarne.Funzioni di ordinamento standard in SML?

+0

cosa stai cercando di ordinare? –

+0

@ Elenchi RachelGallen. –

+0

Non so cosa intendi per scarse, ma la home page [SML Basis Library] (http://www.standardml.org/Basis/) è un buon posto per cercare le funzionalità –

risposta

11

Rachel è solo in parte ragione. È vero che non esiste alcuna funzionalità di ordinamento definita nella libreria di base SML, tuttavia la maggior parte delle implementazioni estendono la libreria di base e aggiungono funzionalità aggiuntive.

Come tale MosML ha sia un modulo ArraySort sia un modulo ListSort e SML/NJ ha una firma LIST_SORT con un'implementazione ListMergeSort. Dispone anche di altre funzionalità di ordinamento sugli array come MosML. Vedere lo toc del manuale della libreria SML/NJ per un elenco completo.

1

come su questo per l'ordinamento di un elenco? si può sempre usare inversa per ottenere il contrario sia

- fun sort(L) = 
= if L=[] then [] 
    = else if tl(L)=[] then L 
= else merge(sort(take(L)),sort(skip(L))); 
val sort = fn : int list -> int list 

vedere here

+0

Cosa sono unire, prendere e saltare ? Mi spiace di chiederlo, ma c'è davvero una documentazione zilch là fuori. –

+0

Quindi presumo che non ci sia una funzione di ordinamento standard in SML, giusto? –

+1

No, devi creare il tuo –

1

Ecco un Quicksort standard di

fun qsort(func) = 
let 
    fun 
     sort([]) = [] | 
     sort(lhd :: ltl) = sort(List.filter(fn (x) => func(x, lhd))(ltl)) @ [lhd] @ sort(List.filter(fn (x) => not(func(x, lhd)))(ltl)) 
in sort 
end; 

solo in alcuni passi di confronto (funzione che prende due elemnets con lo stesso tipo e restituire boolean) e restituirà una funzione di ordinamento per voi Se sei stato più in discussione don Non esitate a chiedere :)

+0

a proposito, questo ordinatore conserverà l'ordine se e solo se func (x, y) = false per x = y –