On Thu, 26 Oct 2000, Greg Belenky wrote: > # Например, в Tcl нет встроенного unless, но я могу написать > # proc unless {condition args} { > # eval if [list !$condition] $args > # } > # и получить конструкцию неотличимую по использованию от стандартного if. > > это не + Tcl. в Паскале, например, тоже нет unless. > не думаю, что eval ускорит выполнение программы, легче if с ! написать.
На самом деле и не замедлит. args это уже список. Так что сливать/парсить его не придется. Кстати, в perl есть конструкция eval { }; которая тоже ничего не замедляет. Просто семантика у Tcl-евского и перлового eval заметно разная. > # Благодаря этому в TclX есть такие симпатичные конструкции как > # for_recursive_glob file pattern { > # do_something with $file > # } > # > > ну и чего такого? насколько я понял - обработка файлов, удовлетворяющих > паттерну? никогда про процедуру find в перле не слышали? Ну и то, что это не процедура, а полноценная управляющая конструкция. Благодаря этому можно писать проблемно-ориентированные расширения, в которых в виде управляющих конструкций реализована, например, работа с результатами SQL-запроса. Это намного удобнее для конечного пользователя, если данный скриптовый язык используется как макроязык встроенный в некоторое большое приложение. > # И еще я обожаю писать процедуры нотификации об ошибке, которые > # по возвращении вызывают return из вызвавшей процедуры. > > а если ошибка возникла на 666 рекурсивном вызове и повлияла на результат > предыдущих 665? что будет тогда? Тогда надо использовать нормальные exception. А описанную конструкцию я обычно использую в обработчиках событий. Кстати, посредством встроенного event-loop в Tcl очень легко реализуется хвостовая рекурсия, а также циклы работающие в фоновом режиме (без всяких нитей). > > die, warn, carp понятнее... Привычнее. А у меня бывают ситуации когда мне нужно то то, то другое. Ох, если бы я писал Communiware на tcl, не извращался бы я с парсерами, а просто делал бы шаблонам eval в slave interpreter-е из которого старательно удалены все потенциально-опасные команды. Но, у perl есть и преимущества, и они в тот момент, когда принималось решение, перевесили. -- Victor Wagner [EMAIL PROTECTED] Programmer Office:7-(095)-785-09-72 Communiware.Net Home: 7-(095)-135-46-61 http://www.communiware.net http://www.ice.ru/~vitus