Почему интерпретатор 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
Другие вопросы по тегам