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

2009-04-20T16:37:00+07:00

Что вернет следующее выражение:
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! за идею.