Я читал this и было интересно, если :: всегда более эффективно, чем @ или если только в этой конкретной реализации rev
Временная сложность :: и @ (Ocaml)
let rec rev = function
| [] -> []
| h::t -> rev t @ [h]
let rev l =
let aux accu = function
| [] -> accu
| h::t -> aux (h :: accu) t
Например, если я хотел добавить элемент в очереди, будет ли разница в этих двух методов:
let append x q = q @ [x]
и
type 'a queue = {front:'a list; back:'a list}
let norm = function
| {front=[]; back} -> {front=List.rev back; back=[]}
| q -> q
let append x q = norm {q with back=x::q.back}