|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Вот текст:prog3 s i=0,per=12 experem(per) s i=i+1 w i," ",per,! q:(i=10) d experem(per) ; файл с программкой называется prog3.m компилирую командой: zl "prog3" при компиляции ошибок не выдаёт и файл prog3.o получается запускаю командой: d ^prog3 и получаю: Код: plaintext 1. 2.
если немного изменить программку:prog3 s i=0,per=12 experem s i=i+1 w i," ",per,! q:(i=10) d experem ; написав не experem(per), а experem то всё компилируется без ошибок и исполняется без ошибок. В результате выполнения получаю: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
И ещё один вопрос. после неудачного компилирования и выполнения первого варианта, если пытаюсь скомпилировать второй вариант, то получаю такое сообщение: Код: plaintext
приходиться выходить и обратно запускать gtm почему так, как убрать этот активный старый шаблон с компилирования старого варианта prog3? За помощь заранее благодарен! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 17:39 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567, если первый скомпилированный вариант запустить вот так: d prog3^prog3 то выдаёт ту же ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 17:57 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Если выполнение кода передается при переходе на следующую строку в которой метка с параметрами, то выполнение этой строки недопустимая операция, поскольку нет сопоставления фактических параметров формальным. В этом случае должен выполняться неявный quit. Либо если по-старому, то кидаться ошибка о недопустимости передачи управления на такую строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 19:15 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567, во-первых, по ошибке: Код: plaintext 1. 2. 3. 4.
я попробовал правильное выполнение функции:prog3 s i=0,per=12 experem(per) s i=i+1 w i," ",per,! q:(i=10) s r=$$experem(per) ; но ошибка все та же. я так не писал еще ни разу, потому как бы новичок в М, я больше по С/С++/Python. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 19:17 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567 , Пример для Caché, но должен работать и на GT.Mprog3 s i=0,per=12 d experem(per) q ; можно эту команду и опустить experem(per) s i=i+1 w i," ",per,! q:(i=10) d experem(per)
<...> почему так, как убрать этот активный старый шаблон с компилирования старого варианта prog3? http://tinco.pair.com/bhaskar/gtm/doc/books/pg/UNIX_manual/ch06s37.html]ZL[ink] SergeyLeeя попробовал правильное выполнение функции experem - ни разу не функция, так как не возвращает значение ( q:(i=10) ). ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2015, 21:48 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
servit, prog3 s i=0,per=12 d experem(per) q ; можно эту команду и опустить experem(per) s i=i+1 w i," ",per,! q:(i=10) d experem(per)Да действительно этот код работает. Непонятно зачем делать вызов функции experem(per) ? пробовал вот такой код:prog3 s i=0,per=12 d experem(per) q ; можно эту команду и опустить experem(per) s i=i+1 w i," ",per,! q:(i=10) 0 d experem(per)теперь функция возвращала значение - этот код не работает, ошибка та же. по поводу второго вопроса, прочитал по ссылке - не понял почему после неудачного запуска далее не компилируются и не запускаются программки. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2015, 21:40 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567, In GT.M, the name of the source file determines the name of the GT.M routine. The file name of the object file is not required to match the name of the routine. Linking the object file makes the internal routine name (derived from the source file) known to GT.M. This can lead to potential confusion, however, since both ZLINK and auto-ZLINK use the name of the object file to find the routine. When the object file name differs from the name of the routine, auto-ZLINK generates a run-time error. Может здесь объяснение по поводу моего второго вопроса, но я ничего не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2015, 21:44 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567, А если после неудачного выполнения при проблеме компилирования выполнить другую программку из одного quit и попробовать снова компилировать первую? Может такое быть, что текущей рутиной процесса остается последняя выполненная и она просто залочена в кеше сервера? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2015, 00:36 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
ну я, Если компилировать другую программку (правильно написанную), то она нормально компилируется и выполняется. Если попробовать после этого опять скомпилировать первую программку то она не скомпилируется и выдаст всё то же: Код: plaintext 1.
Как убрать её из рутины процесса? И опять по коду. Я так и не понял почему нельзя выполнить подпрограмму с переданным ей параметром после блока самой этой подпрограммы? Кстати действительно как писалось ранее если выполнить эту подпрограммку до блока самой этой подпрограммки, то всё компилируется и исполняется без ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2015, 22:53 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567, по коду - в трёх книжках ответа не нашёл! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2015, 22:54 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567, Получается что дело не в том где находится ссылка на подпрограмму, до её кода или после. Просто ссылка с параметром не должна попасть на исполнение. Вот такой код компилируется без ошибок:prog3 s i=0,per=12 experem(per) s i=i+1 w i," ",per,! q ;но не исполняется - выдаёт вот что: Код: plaintext 1. 2. 3. 4.
вот такой код то же компилируется но не исполняется:prog3 s i=0,per=12 d experem(per) experem(per) s i=i+1 w i," ",per,! q ; Код: plaintext 1. 2. 3. 4. 5.
первый раз выполнилось - строка d experem(per) а далее когда пришло на ссылку - experem(per) выдало ошибку. А вот такой код склмпилируется и выполнится без ошибок.prog3 s i=0,per=12 d experem(per) q experem(per) s i=i+1 w i," ",per,! q ; Код: plaintext 1. 2. 3.
до ссылки - experem(per) дело не дошло, поэтому не было и ошибок. Почему ссылка с параметром при исполнении даёт ошибку! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2015, 23:29 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567, По первому вопросу тему наверное можно закрывать. Действительно метка с параметрами не должна исполняться в результате поочерёдного исполнения строк кода. Вот что нашёл в книге: Если метка была объявлена с параметрами , то на неё нельзя перейти безусловным переходом, поскольку исполняющая машина (интерпретатор) MUMPS не знает как и что сопоставить этим параметрам как локальным переменным нового контекста, при безусловном переходе не создаётся новый контекст или фрейм на стеке. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2015, 10:11 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567до ссылки - experem(per) дело не дошло, поэтому не было и ошибок.В Caché подразумевается неявный quit перед объявлением процедурного блока, поэтому можно как c quit, так и без него - ошибки не будет:Документация CachéExecution encounters the next procedure block (a label with parameter parentheses). Execution stops when encountering a label line with parentheses, even if there are no parameters within the parentheses.В GT.M похоже не так: нужно обязательно указывать quit, иначе возникнет ошибка.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2015, 10:23 |
|
не запускается на исполнение gt.m програмка
|
|||
---|---|---|---|
#18+
Виталийv4567ну я, Если компилировать другую программку (правильно написанную), то она нормально компилируется и выполняется. Если попробовать после этого опять скомпилировать первую программку то она не скомпилируется и выдаст всё то же: Код: plaintext
Как убрать её из рутины процесса?Вы указанную выше ссылку открывали?ZLink Important An active routine is displayed with $STACK() or ZSHOW "S" of the M virtual stack. By default, an attempt to replace an active routine results in a run-time error . To replace an active routine with a new version, either use VIEW "LINK":"RECURSIVE" or remove the active routine from the stack using ZGOTO or the appropriate number of QUITs and then execute the ZLINK command. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2015, 10:36 |
|
|
start [/forum/topic.php?fid=39&msg=38861999&tid=1556731]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 273ms |
total: | 428ms |
0 / 0 |