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]
array_type = get_type(expression.eval(values[0]))
if array_type == STRING_TYPE || array_type == NUMBER_TYPE || values.size == 0
n = 0
values.sort_by do |value|
value = expression.eval(value)
value_type = get_type(value)
if value_type != array_type
msg = "function sort() expects values to be an array of only numbers, or only integers"
return maybe_raise Errors::InvalidTypeError, msg
end
n += 1
[value, n]
end
else
return maybe_raise Errors::InvalidTypeError, "function sort() expects values to be an array of numbers or integers"
end
else
return maybe_raise Errors::InvalidTypeError, "function sort_by() expects an array and an expression"
end
else
return maybe_raise Errors::InvalidArityError, "function sort_by() expects two arguments"
end
end