понедельник, апреля 20, 2009

Задачка на эзотерическое программирование

Что вернет следующее выражение:
1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9

Большая часть читателей, немного поразмыслив, ответит: 2.
И будет права.
Но весь трюк задачи в том,что правы они будут только наполовину.
Смотрите сами. Вот вывод на perl:
perl -e 'print 1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9;'
2

Вот вывод на php:
php -r 'echo 1 ? 2 : 3 ? 4 : 5 ? 6 : 7 ? 8 : 9;'
8


Объясняю, почему так. В большинстве языков (Perl, C, C++, Java, JavaScript, Ruby), эта конструкция читается по такому алгоритму: если верно 1, то выдать 2 - иначе вычислить остальное. В php выражение равносильно
(1 ? 2 : 3 ? 4 : 5 ? 6 : 7) ? 8 : 9

В чем и раскрывается его адская сущность.
Непонятно, почему создатели языка пошли этим странным путём, когда конструкция заимствована из Cи, но сам факт оставляет пищу для размышлений.
Огромное спасибо Shock! за идею.

Комментариев нет:

Отправить комментарий

Постоянные читатели

Архив