2013-03-30 4 views
1

Рассмотрим:Почему интерпретатор rebol возвращает разные результаты?

>> print max 5 6 7 8 
6 
== 8 

В документации говорится, что max принимает только два аргумента, поэтому я понимаю, первая линия. Но со второй строки похоже, что интерпретатор все еще способен найти максимум произвольного числа аргументов.

Что здесь происходит? В чем разница между двумя результатами? Есть ли способ захватить второй?

ответ

5

Я действительно не знаю Rebol, но то, что я замечаю, это то, что вы используете print внутри REPL. Первый выход - от print, который выводит результат max 5 6. Второй вывод - из REPL, который выводит значение всего вашего выражения - возможно, это только последний элемент в списке? Если вы изменили порядок своих входов, я уверен, вы увидите другой результат.

+0

Вы правы. Он интерпретирует его в другом порядке, чем я ожидал, что вызвало путаницу. – jwalk

+0

@hobbs есть, в значительной степени. «Список», как он его называет, на самом деле не серия! поскольку диалект «делать» видит вещи, поскольку они не заключены в квадратные скобки, а просто четыре целого! одно за другим. Первые два служат аргументами 'max', а последние - просто автономными целыми числами! выражения, которые сами оценивают. – Adrian

+0

Ну, если вы наберете «>> 8», вы увидите «== 8» на консоли. Это означает «8, вернулся 8 назад». В вашем примере вы вычислили что-то (макс.), Затем распечатаете результат вычисления (6), затем вы выполните семь (7), а затем DO 8, которые перенаправляют 8 обратно на консоль (строка == означает возвращаемое значение, оно не является результатом PRINT или PROBE) – endo64

2

max является аббревиатурой от не более. Как правильно предположил @hobbs, он принимает два аргумента, и то, что вы видите, это всего лишь логика оценщика поворота кривошипа ... и становится равной последнему значению в выражении. В этом случае вы не используете этот результат, поэтому интерпретатор показывает его вам с помощью «==». Но вы могли бы назначить это целое выражение переменной (например).

Что вы намеревались - это то, что получает максимальное значение из серии. На диалекте DO все функции имеют фиксированную арность, и правильный способ создания такого зверя состоял бы в том, чтобы сделать одним аргументом ... серии.

Такая вещь действительно существует, хотя это не аббревиатура ...

>> print maximum-of [5 6 7 8] 
8 
Смежные вопросы