package org.jerlang.stdlib.lists;
import org.jerlang.erts.erlang.Error;
import org.jerlang.type.List;
import org.jerlang.type.Term;
public class ListsReverse {
private ListsReverse() {
}
public static Term dispatch(List params) {
switch (params.length()) {
case 1:
return reverse_1(params.head().toList());
default:
throw Error.badarg;
}
}
/**
* Returns a list with the elements in `list` in reverse order.
*
* http://www.erlang.org/doc/man/lists.html#reverse-1
*/
public static List reverse_1(List list) {
if (list.equals(List.nil)) {
return list;
}
if (list.tail().equals(List.nil)) {
return list;
}
List result = List.nil;
while (!list.equals(List.nil)) {
result = new List(list.head(), result);
list = list.tail();
}
return result;
}
}