def call(args)
if args.count == 2
if get_type(args[0]) == ARRAY_TYPE && get_type(args[1]) == EXPRESSION_TYPE
values = args[0].to_ary
expression = args[1]
array_type = get_type(expression.eval(values[0]))
if array_type == STRING_TYPE || array_type == NUMBER_TYPE || values.empty?
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