package org.jerlang.stdlib.lists;
import org.jerlang.erts.erlang.Error;
import org.jerlang.stdlib.Lists;
import org.jerlang.type.List;
import org.jerlang.type.Term;
public class ListsDelete {
private ListsDelete() {
}
public static Term dispatch(List params) {
switch (params.length()) {
case 2:
Term element = params.head();
params = params.tail();
List list = params.head().toList();
return delete_2(element, list);
default:
throw Error.badarg;
}
}
/**
* Returns a copy of List1 where the first element matching is deleted,
* if there is such an element.
*
* http://www.erlang.org/doc/man/lists.html#delete-2
*/
public static List delete_2(Term element, List list) {
List result = List.nil;
boolean deleted = false;
while (list.length() > 0) {
if (!deleted && list.head().equals(element)) {
deleted = true;
} else {
result = new List(list.head(), result);
}
list = list.tail();
}
return Lists.reverse(result);
}
}