Почему интерпретатор rebol возвращает разные результаты?
Рассматривать:
>> print max 5 6 7 8
6
== 8
В документации говорится, что max
принимает только два аргумента, поэтому я понимаю первую строку. Но из второй строки похоже, что интерпретатор все еще может найти максимум произвольного числа аргументов.
Что тут происходит? В чем разница между двумя результатами? Есть ли способ захватить второй?
2 ответа
Я действительно не знаю Rebol, но я замечаю, что вы используете print
внутри ТД. Первый вывод из print
, который выводит результат max 5 6
, Второй вывод из REPL, который выводит значение всего вашего выражения - что, возможно, является только последним элементом в списке? Если бы вы изменили порядок своих входных данных, держу пари, вы увидите другой результат.
max - это сокращение от максимума. Как правильно догадался @hobbs, он принимает два аргумента, и вы видите лишь логику оценщика поворота кривошипа... и равного последнему значению в выражении. В этом случае вы не используете этот результат, поэтому переводчик показывает его с "==". Но вы могли бы назначить все это выражение переменной (например).
То, что вы намеревались, это то, что получает максимальную ценность из серии. В диалекте DO все функции имеют фиксированную арность, и правильный способ создать такого зверя - заставить его принять один аргумент... серию.
Такая вещь существует, хотя здесь нет аббревиатуры...
>> print maximum-of [5 6 7 8]
8