def call(args)
if args.count == 2
if get_type(args[0]) == ARRAY_TYPE && get_type(args[1]) == EXPRESSION_TYPE
values = args[0]
expression = args[1]
values.sort do |a,b|
a_value = expression.eval(a)
b_value = expression.eval(b)
a_type = get_type(a_value)
b_type = get_type(b_value)
if (a_type == STRING_TYPE || a_type == NUMBER_TYPE) && a_type == b_type
a_value <=> b_value
else
raise Errors::InvalidTypeError, "function sort() expects values to be an array of numbers or integers"
end
end
else
raise Errors::InvalidTypeError, "function sort_by() expects an array and an expression"
end
else
raise Errors::InvalidArityError, "function sort_by() expects two arguments"
end
end