Может ли кто-нибудь объяснить мне дизайнерские решения, лежащие в основе Autolisp / visual lisp?

Интересно, может ли кто-нибудь объяснить логическое обоснование следующих функций autolisp / visual lisp? Мне кажется, что они идут вразрез с общепринятой практикой программного обеспечения ... Я что-то упускаю?

  • Все переменные являются глобальными по умолчанию (т.е. если они не помещены после / в аргументы функции)
  • Чтение / запись данных из autocad требует помещения материала в список ассоциаций с большим количеством магических чисел. 10 означает координаты x / y, 90 означает длину списка координат, 63 означает цвет и т. Д. Хорошо, вы можете сохранить их в некоторых константах, но это будет означают еще больше глобальных переменных, и в документации рекомендуется использовать магические числа напрямую.
  • Lisp - это язык функционального стиля, который поощряет программирование путем рекурсии вместо итераций, но хвостовая рекурсия, как правило, не оптимизирована для визуального лиспа, что приводит к ужасным стекам вызовов - если, конечно, вы не повторяете итерацию. Но синтаксис цикла очень ограничен; например вы не можете выйти из цикла или вернуть значение из цикла, если не поставите какой-либо флаг в условие завершения. Результат, некрасивый код.
  • Обычно вы вынуждены объявлять переменные повсюду, что противоречит функциональному программированию - так зачем использовать функциональный (-иш) язык?
5
задан Marcin 2 February 2012 в 15:34
поделиться