.NET, arx и atoms-family

Есть такая функция в лиспе - atoms-family. По идее должна показывать зарезервированные символы AutoLISP / VisualLISP. Но, кроме заявленного функционала, она может показать пользовательские команды и функции, загруженные в текущий документ.

Но, как всегда, есть нюансы:

  1. Показываются определенные пользователем команды, только если эти команды написнаны на лиспе. Компилирован он или нет - по идее, без разницы (честно говоря, просто не проверял).
  2. Если написать на .NET или arx команду, то она не показывается в списке, возвращаемом atoms-family.
  3. В то же время lisp-функции, написанные на arx, гарантированно показываются в списке.

Можно проверить самостоятельно: загружаем, например, небезысвестный ExplodeAllProxy от А.Ривилиса и смотрим на результат выполнения

1
(vl-sort (vl-remove-if-not '(LAMBDA(x) (WCMATCH (strcase x) "*EXPL*PROXY*")) (ATOMS-FAMILY 1 )) '<)

В консоль VLIDE выведется строка вида

1
("EXPLODEALLPROXYINBLOCK" "EXPLODEPROXYENTITY")

И никаких C:EXPLODEALLPROXY или C:REMOVEALLPROXY.

Размещено в Код LISP, Функции LISP · Метки: , ,



Комментарии

Есть 2 коммент. к “.NET, arx и atoms-family”
  1. Дима_ пишет:

    А почему она должна показываться - показывет все символы определенные в лиспе, не зависимо от их содержания - в том числе и те в которых функции - а команды-то в лиспе (если они не в нем написанны) не определенны - (list lambda setq princ member) - вернет соответствующий список, а (list line _line c:line c:_line) вернет естественно 4 nil'а - т.к. в лиспе таких имен нет.

  2. Кулик Алексей aka kpblc пишет:

    Если честно, я просто надеялся на то, что atoms-family покажет все команды, в том числе и содержащиеся в загруженных arx/dll модулях. На 2009 не показало, и я тихо подозреваю, что и на остальных версиях то же самое будет.

Поделитесь своим мнением


Я не робот.