template int list_length(T list lst) { if(lst = nil[T]) { return 0; } else { return 1 + list_length(cdr lst); } } template int sum_lengths(T list lst1, U list lst2, V list lst3) { return list_length(lst1)+ list_length(lst2) + list_length(lst3); } template T list append_lists(T list lst1, T list lst2){ return lst1 @ lst2; } template U list map((T) -> U foo, T list lst) { if(lst = nil[T]) { return nil[U]; } else { return foo(car lst)::map(foo, cdr lst); } } float divide (float x) { x /= 2.0; return x; } int array [] arrayify (int x) { return {x}; } float list main () { float list testlist = [5.0;4.0;6.0]; (float) -> float foo = divide; return map(foo, testlist); }