Il libro che sto leggendo su Erlang ha esercizi sul retro e uno è quello di ricreare gli elenchi: aggiungere la funzione.Come posso concatenare la lista di Erlang concatenata senza utilizzare il modulo elenchi?
Potrei farlo semplicemente usando l'operatore ++, ma non è molto lento? E penso che il punto dell'esercizio sia farlo usando le operazioni di lista che scrivo.
Finora l'unico approccio che mi veniva in mente è quello di fare qualcosa di simile:
concat([], _, Results)->
Results;
concat(_, [], Results)->
Results;
concat([Ah|At],B,Results) ->
concat(At,B,[Ah|Results]).
Ma so che questo non è corretto ...
Qualche suggerimento su come andare a fare questo?
EDIT: Per chiarire la domanda, ecco un ingresso e un'uscita esempio:
ingresso: [[1,2,3], [], [4,5], [6]] uscita: [1,2,3,4,5,6]
Dopo aver lavorato un po ', mi si avvicinò con questo codice così:
append([A|[B|[T|[]]]]) ->
append([A++B|T]);
append([H|T]) ->
H++T.
Tuttavia, questo funziona solo per quando la lista è la dimensione 3 Come posso modificarlo in modo che funzioni per una data quantità di elenchi di dimensioni casuali?
Non faccio uso di Erlang, ma non posso immaginare che 'lists: append' sia più veloce di' ++ '(penso che sia O (n), non importa come lo fai). – Zifre
'liste: append' _is_' ++ '. –
Ma ++ può essere inefficiente se il suo operando di sinistra è più grande del suo operando di destra. Questa penalità delle prestazioni si verifica anche con le liste: append? – samoz