Permalink
Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
37 lines (30 sloc) 857 Bytes
// P05 Reverse a list.
import core.List;
import static core.List.*;
class P05 {
// "Predefined" function
<T> List<T> f0(List<T> list) {
return list.reverse();
}
// Recursion (inefficient)
<T> List<T> f1(List<T> list) {
return list.isEmpty()
? List.<T>nil()
: concat(f1(list.tail()), singleton(list.head()));
}
// Tail recursion
<T> List<T> f2(List<T> list) {
return f2_inner(list, List.<T>nil());
}
private <T> List<T> f2_inner(List<T> list, List<T> acc) {
return list.isEmpty()
? acc
: f2_inner(list.tail(), cons(list.head(), acc));
}
// Imperative
<T> List<T> f3(List<T> list) {
List<T> acc = nil();
for (T each : list) acc = cons(each, acc);
return acc;
}
}