EVAL-SUBST и кавычки в строке.

Обсуждение программ nnCron и nnCron LITE

EVAL-SUBST и кавычки в строке.

Postby Gildor » Fri, 12 Nov 2004, 00:07

Прошу прощения за несколько расплывчатый вопрос.
1. Чем отличаются эти конструкции? Какую "правильнее" применять?
S" 7" S" %WD%" COMPARE
и
WDay@ 7 =
2. Почему работает конструкция S" 7" S" %WD%" COMPARE, в то время как в хелпе написано, что надобно подкладывать EVAL-SUBST?
Спасибо.
Gildor
 
Posts: 34
Joined: Thu, 11 Nov 2004, 23:41

Postby Tez » Fri, 12 Nov 2004, 02:22

"1. Чем отличаются эти конструкции? Какую "правильнее" применять?
S" 7" S" %WD%" COMPARE и WDay@ 7 ="


WDay@ 7 =
– быстрее работает.

"2. Почему работает конструкция S" 7" S" %WD%" COMPARE"

– Почитай в хелпе про слово COMPARE.

ЗЫ
S" 7" S" %WD%" COMPARE можно и без EVAL-SUSBT. Вот так:
S" 7" WD COMPARE
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby Gildor » Fri, 12 Nov 2004, 14:56

WDay@ 7 =
– быстрее работает.

Основание для подобного утверждения?
"2. Почему работает конструкция S" 7" S" %WD%" COMPARE"

– Почитай в хелпе про слово COMPARE.


Я не имею привычки писать на форумы, не прочитав доку. Конкретнее?
S" 7" S" %WD%" COMPARE можно и без EVAL-SUSBT. Вот так:
S" 7" WD COMPARE

Вот я и спрашиваю: почему в этой конструкции не нужно EVAL-SUSBT?
Gildor
 
Posts: 34
Joined: Thu, 11 Nov 2004, 23:41

Postby VK » Fri, 12 Nov 2004, 15:22

Gildor wrote:Я не имею привычки писать на форумы, не прочитав доку.

Хмм...

S" 7" S" %WD%" COMPARE
Вот я и спрашиваю: почему в этой конструкции не нужно EVAL-SUSBT?

Отчего же "не нужно"? Очень даже нужно... Или ты действительно хочешь сравнивать строку '7' со строкой '%WD%'?
CU
VK
User avatar
VK
 
Posts: 680
Joined: Wed, 14 Jul 2004, 19:17

Postby Tez » Fri, 12 Nov 2004, 20:57

WDay@ 7 =
– быстрее работает.
Основание для подобного утверждения?

С каких это пор работа со строками была быстрее работы с числами? Это вообще.
Однако касательно темы:
– В COMPARE строки сравниваются “символ за символом, до длины наиболее короткой из строк или до нахождения различий” (из определения слова).
– WDay@ является частью определения WD.
Тебе достаточно аргументов?

PS
Не нужно понимать «быстрее» буквально. “Быстрее” здесь выражается в еле уловимых величинах.

PPS
Рекомендую почитать: «Как правильно задавать вопросы» (набрел на эту интересную статью благодаря подписи roman78 (за что ему спасибо!); сейчас читаю сам).
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby Tez » Fri, 12 Nov 2004, 21:41

Прочел раздел "Как давать хорошие ответы" в упомянутой мною статье. :oops:

Иду на встречу.
Попробуй в консоли: S" test" S" test" COMPARE .
("." точка выводит на консоль число с вершины стека (результат COMPARE))
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby Gildor » Sun, 14 Nov 2004, 17:28

Отчего же "не нужно"? Очень даже нужно... Или ты действительно хочешь сравнивать строку '7' со строкой '%WD%'?


Ну так у меня оно именно в таком виде и работает! Именно при таком сравнении! И тут явно я что-то не понимаю, причем явно что-то из области работы со строками. Если честно, я предпочел бы, чтобы мне не отвечали подробно (чтобы время не тратить), а конкретнее ткнули носом в доку. Спасибо.[/quote]
Gildor
 
Posts: 34
Joined: Thu, 11 Nov 2004, 23:41

Postby Gildor » Sun, 14 Nov 2004, 17:36

Tez wrote:Прочел раздел "Как давать хорошие ответы" в упомянутой мною статье. :oops:

Иду на встречу.
Попробуй в консоли: S" test" S" test" COMPARE .
("." точка выводит на консоль число с вершины стека (результат COMPARE))


:-) Спасибо, попробую, поэкспериментирую. Я в предыдущем постинге написал уже, что с благодарностью принимаю ответы, но готов не тратить время отвечающих, если ткнуть меня носом в конкретную доку (если можно - даже в конкретное место в оной).
Gildor
 
Posts: 34
Joined: Thu, 11 Nov 2004, 23:41

Postby Valery_Kondakoff » Sun, 14 Nov 2004, 19:22

CU
VK
User avatar
Valery_Kondakoff
Site Admin
 
Posts: 769
Joined: Thu, 01 Jul 2004, 20:49
Location: Moscow, Russia

Postby Tez » Sun, 14 Nov 2004, 19:24

конкретную доку (если можно - даже в конкретное место в оной).

nnCron Help > Index > вводишь в поле поиска слов COMPARE
Там написано:
Как сpедствами Фоpта сpавнить две стpоки на идентичность?

Воспользоваться словом COMPARE, котоpое возвpащает 0, если сpавнение истинно.
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby Gildor » Thu, 18 Nov 2004, 02:20

Господа, я вам премного благодарен, серьезно. Только я имел в виду немного другое. Разумеется, я досконально прочитал доку, прилагаемую к nnCron, и (менее тщательно) мануалы, рекомендованные на сайте, перед тем, как писать на форум. И по результатам прочтения я кое-что не понял, у меня возник вопрос, который я попытался сформулировать в этой теме, видимо, неудачно. Что ж, надо полагать, что я еще не знаю той самой половины ответа, которая нужна для грамотной формулировки вопроса :-). Переформулирую, напишу заново.

А пока скажите мне, я что-то опять не понимаю или что-то не то со строчкой в мануале, на которую сослались тут уже все кто мог?

Code: Select all
Воспользоваться словом COMPARE, котоpое возвpащает 0, если сpавнение истинно.
Пpимеp:

S" first string" S" second string" COMPARE 0=
IF MSG: "Strings are the same"
ELSE MSG: "Strings are different"
THEN


Разумеется, данный пример работает только в том случае, если убрать из первой строчки '0=', что логично. Где я неправ?
Gildor
 
Posts: 34
Joined: Thu, 11 Nov 2004, 23:41

Postby Tez » Thu, 18 Nov 2004, 04:19

Попробуй в консоли! (Универсальный ответ.)
Code: Select all
: test S" test" S" test" COMPARE IF ." strings are the same" ELSE ." strings are
 different" THEN ; test
Этот код определяет новое слово test (или переопределяет его заново если оно уже есть). И после определения новое слово запускается. Через определение слова нужно, т.к. в консоли конструкцию IF ... ELSE ... THEN применять "напрямую" нельзя.
Когда слово исполнится оно выведет результат сравнения строк "test" и "test".
Попробуй менять код - быстро все поймешь. В частности, попробуй поставить 0= после COMPARE.
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby Gildor » Tue, 23 Nov 2004, 08:17

Tez wrote:Попробуй в консоли! (Универсальный ответ.)
Code: Select all
: test S" test" S" test" COMPARE IF ." strings are the same" ELSE ." strings are
 different" THEN ; test
Этот код определяет новое слово test (или переопределяет его заново если оно уже есть). И после определения новое слово запускается. Через определение слова нужно, т.к. в консоли конструкцию IF ... ELSE ... THEN применять "напрямую" нельзя.
Когда слово исполнится оно выведет результат сравнения строк "test" и "test".
Попробуй менять код - быстро все поймешь. В частности, попробуй поставить 0= после COMPARE.


OK, спасибо, попробую. Хотя я пока с консолью не работал, но собираюсь вплотную к ней подступиться, начну с этого скрипта. Но только я вот не понимаю, чем в данном случае консоль круче тестовой задачи. А в ней все работает именно так, как я описал: без 0= "Strings are the same" в случае если строки равны и наоборот, а в доке написано обратное.
Gildor
 
Posts: 34
Joined: Thu, 11 Nov 2004, 23:41

Postby Tez » Tue, 23 Nov 2004, 11:50

> Но только я вот не понимаю, чем в данном случае консоль круче тестовой задачи.

– В консоли ты можешь выполнять вручную код задачи. Что позволит тебе наблюдать за состоянием стека, и что слова возвращают. Т.е. избежать или найти ошибки. И куда удобнее и быстрее чем в задаче.
Это программирование снизу вверх. Одно из преимуществ форта.
Перед тем как работать в консоли, я советую почитать: nnCron Help > Работа с программой > Инструменты > Console

> А в ней все работает именно так, как я описал: без 0= "Strings are the same" в случае если строки равны и наоборот, а в доке написано обратное.

– В доке все верно написано.
Tez
 
Posts: 205
Joined: Mon, 23 Aug 2004, 09:17
Location: Moscow

Postby Gildor » Thu, 25 Nov 2004, 09:55

Tez wrote:>
– В доке все верно написано.


Читаем доку:
Воспользоваться словом COMPARE, котоpое возвpащает 0, если сpавнение истинно.
Пpимеp:
Code: Select all
S" first string" S" second string" COMPARE 0=
IF MSG: "Strings are the same"
ELSE MSG: "Strings are different"
THEN


В данном примере если 'first string' будет равен 'second string', то на экране появится сообщение: "Strings are different".
Gildor
 
Posts: 34
Joined: Thu, 11 Nov 2004, 23:41

Next

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 4 guests