2011-11-07 18 views
10

In Erlang quando si dispone di un elenco di caratteri stampabili, è una stringa, ma una stringa è anche un elenco di elementi e tutte le funzioni di un elenco possono essere applicate a una stringa. Idealmente, la struttura dei dati: la stringa non esiste in erlang.

Parte del mio codice deve essere certa che qualcosa non è solo una lista, ma è una stringa. (Una vera stringa). Ha bisogno di separare gli elenchi, ad es. [1,2,3,a,b,"josh"], da stringa ad es. "Muzaaya". L'espressione di guardia is_list/1 dirà true per entrambe le stringhe e gli elenchi. Non esiste una guardia del tipo is_string/1 e quindi questo significa che ho bisogno di uno snippet di codice per accertarmi che i miei dati siano una stringa. Una stringa in questo caso è un elenco di solo stampabili (in ordine alfabetico, in entrambi i casi, in alto e in basso) e può contenere numeri, ad esempio "Muzaaya2536 618 Joshua". Ho bisogno di uno snippet di codice (Erlang) che controlli per me e garantisca che la variabile sia una stringa, non solo una lista. graziedifferenziare una stringa da un elenco in Erlang

+0

Vedere anche http://stackoverflow.com/questions/2479713/determining-if-an-item-is-a-string-or-a-list-in-erlang – legoscia

risposta

5

utilizzando l'isprint (3) definizione di caratteri stampabili -

isprint(X) when X >= 32, X < 127 -> true; 
isprint(_) -> false. 

is_string(List) when is_list(List) -> lists:all(fun isprint/1, List); 
is_string(_) -> false. 

non sarà in grado di usarlo come una guardia, però.

+0

grazie a butter71, anche questo funziona molto bene ! –

+0

Funziona con il set di caratteri Latin1, ma potrebbe essere importante notare che rifiuterà i codici carattere Unicode. – goncalotomas

Problemi correlati