2011-11-28 13 views
9

sto attraversando "pragmatico Programming Erlang" dove c'è una funzione definita in questo modo:Erlang: quale abbinamento di pattern è più efficiente (liste)?

split("\r\n\r\n" ++ T, L) -> {reverse(L), T}; 
split([H|T], L) -> split(T, [H|L]); 
split([], _) -> more. 

Che mi interessa è prima partita, vale a dire "\r\n\r\n" ++ T - c'è differenza di prestazioni tra un tale modello e uno simile, che mi è venuto in mente: [13,10,13,10|T]? O sono equivalenti?

So che è una domanda molto semplice e che potrei (probabilmente) controllare da solo, ma se c'è una differenza, mi piacerebbe sapere perché è così.

Grazie!

risposta

8

"\r\n\r\n" ++ T è solo zucchero di sintassi per [13,10,13,10|T]. Dovrebbe funzionare allo stesso modo. Se non c'è qualcosa di sbagliato ;-)

+0

Ho pensato che forse "L1 ++ L2' è in qualche modo diverso, perché non ho trovato un modo per trasformarlo in' cons'es quando usato in questo modo: 'T ++ "\ r \ n" '- ma grazie alla tua risposta ho ripensato e ho capito che è possibile, anche se un po 'lungo. Grazie! – cji

+0

'T ++" \ r \ n "' non può essere trasformato in conse, quindi non può essere utilizzato nella corrispondenza del modello. –