Θα ήθελα να ρωτήσω με αφορμή την βελτιωμένη εκδοχή της reverse
που είδαμε στη τελευταία διάλεξη:
fun reverse xs =
let
fun rev (nil, z) = z
| rev (y::ys, z) = rev (ys, y::z)
in
rev (xs, nil)
end
Οι παράμετροι πως γίνονται called από τις συναρτήσεις;
Ρωτάω διότι αν γινόντουσαν called by value, πρακτικά δεν θα είχαμε αντιγραφή $n$ συνολικά στοιχείων (εντός των δυο λιστών στο tuple) σε κάθε αναδρομική κλήση της rev
, άρα και πάλι πολυπλοκότητα τάξης $O(n^2)$;