Jump to content

Recommended Posts

Возник вопрос: как работает компилятор в редакторе скриптов?

Пример: есть скрипт на лиспе, суммирующий длину полилиний (ну или любой другой, этот для примера).

Если подгрузить его через Приложения, а потом запустить командой, всё работает.

Если открыть его в редакторе скриптов и нажать "Запустить" то в моём представлении это должно запускать команду (иначе зачем ещё нужна эта функция), но по факту в командной строке пишется имя команды и не происходит вообще ничего. Это Я что-то не так делаю..?

image.thumb.png.08a89ef9e023f17a7bab2fc7587cb4c8.png

Скрипт прилагать не вижу смысла - пробовал на 3х разных - механика одна и та же.

Edited by Mитька
Link to comment
Share on other sites

3 часа назад, Mитька сказал:

как работает компилятор в редакторе скриптов?


В данном случае речь о компиляции не идёт Здесь имеет место интерпретатор.

Об отладке речь также не идёт. Это всего лишь визуальный редактор, из которого можно запустить скрипт на выполнение.

По сути, на данный момент единственный способ отладки - это вывод информации о прохождении промежуточных этапов выполнения скрипта и состоянии соответствующих переменных. Единственное, надо помнить, что речь идёт не о процедурном, а о функциональном программировании. Иначе можно заблудиться в трёх соснах. Особенно, если скрипт скачет между графической частью и интерактивным приёмом информации от пользователя.

В функциональном программировании ИМХО лучшего отладчика, чем мозги программиста, всё равно нет.

Что касается Редактора скриптов, то лично я предпочитаю Notepad++.

Link to comment
Share on other sites

45 минут назад, A.Kudrjashov сказал:

Это всего лишь визуальный редактор, из которого можно запустить скрипт на выполнение.

Так в том и дело, что НЕЛЬЗЯ, разве нет?

добавлено через 0 минут
45 минут назад, A.Kudrjashov сказал:

Единственное, надо помнить, что речь идёт не о процедурном, а о функциональном программировании.

Можно для дураков переформиулировать?

Link to comment
Share on other sites

11 минут назад, Mитька сказал:

Так в том и дело, что НЕЛЬЗЯ, разве нет?


1.
Судя по приведённому скриншоту, в данном случае происходит определение команды nanoCAD, которая может быть впоследствии выполнена из командной строки.
image.png.d431a7117d1743f25514034dc0caae8b.png

То есть, до выполнения данного скрипта команда ELEN в nanoCAD отсутствовала, а при его корректном завершении должна была появиться.
Что там происходит дальше и в других скриптах - не знаю.

2.
Различия между процедурным и функциональным программированием - это тема не для форума. Если очень упрощённо, то могу показать, как выглядит элементарное арифметическое выражение. Принципиальные сложности и отличия с введением условий, циклов, функций и процедур можете представить себе сами. Скажем так, функциональное программирование несколько перпендикулярно процедурному. Хотя сегодня его элементы встречаются и в обычных языках. К примеру, в каком то смысле функциональными являются конвейеры PowerShell.

В обычном процедурном языке:
X = Y + SIN(100* SQRT(Z/2))/(Y * Z +10)
В LISP (утрирую, но не сильно):
(Setq X (+ Y (/ (SIN (* 100 (SQRT (/ Z 2)))) (+ (* Y Z) 10))))

Если интересно, то вот здесь есть много чего
https://yadi.sk/d/qWePcZh2bdb6sQ

  • Like 3
Link to comment
Share on other sites

1 час назад, A.Kudrjashov сказал:

Судя по приведённому скриншоту, в данном случае происходит определение команды nanoCAD, которая может быть впоследствии выполнена из командной строки

ага, верно. скрипт регистрирует команду в интерфейсе программы. В комстроке собственно это и отображается. Тут либо в конце редактора прописать вызов этой команды (что странно, ибо каждый раз будет регистрироваться новая команда). Либо убрать определение команды  оставить только скрипт команды...

Link to comment
Share on other sites

7 часов назад, Mитька сказал:

Да, без первой строки прогоняет скрипт.

Собственно, так все было и задумано еще Автодеском.

Блок скрипта (defun  …)  только регистрирует функцию, о чем было отмечено выше и о чем вам сообщала командная строка.

Без этой преамбулы все выражения выполняются последовательно в режиме интерпретатора (о чем так же было написано выше).

Если у вас в файле будет нечто типа:

    (defun func1 …)

    (print "Привет!")

    (defun func2 …)

 

то после загрузки такого файла или скрипта будет сообщение о появлении функции1, приветствие и сообщение о функции2

 

Благодаря этому механизму возможно внесение собственных сообщений, сопровождающих загрузку скриптов.

Также возможны более сложные сценарии, когда производится ветвление алгоритма загрузки отдельных функций в зависимости от состояния окружения или определенных переменных.

  • Like 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...