Задачка на эзотерическое программирование
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! за идею.