Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 13:55

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 67 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: преобразование строкового представления угла вида 12°12'12"
СообщениеДобавлено: Сб май 04, 2013 21:47 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
source file: alp.fts
\ 13.03.2013 ~mOleg
\ Copyright [C] 2013 mOleg mOlegg@ya.ru
\ преобразование строкового представления угла вида 12°12'12" в угловые секунды

branch/ case.fts
math/ double.fts

\ попытка распознания строки символов как числа,
\ в случае успеха возвращается распознанное значение ud строка
\ с нераспознанными символами asc # и значение завершающего символа
\ в случе неуспеха возвращается 0
: >nux ( asc # --> ud asc # char | 0 )
DUP >L
0`0 DSWAP 0x0A >number
L> OVER - IFNOT DDROP DDROP FALSE ;THEN
*IF OVER C@ >L SKIP1 L> *IF ;THEN DROP THEN
DDROP DDROP FALSE ;

\ попытка распознать строку asc # как значение угла в угловых секундах
: sec ( ud asc # --> ud 2 | 0 )
>nux *IF [CHAR] " = IF IFNOT DROP D+ 2 ;THEN
DDROP TDROP FALSE ;THEN
TDROP TDROP FALSE ;THEN
NIP NIP ;

\ попытка распознать строку asc # как значение в угловых минутах и секундах
: min ( ud asc # --> ud 2 | 0 )
>nux *IF CASE [CHAR] ' OF D>L 0`60 UD* D+ DL> *IF sec ELSE DDROP 2 THEN ENDOF
[CHAR] " OF NIP IFNOT D+ 2 ELSE DDROP DDROP FALSE THEN ENDOF
TDROP DDROP FALSE
ENDCASE
;THEN
TDROP FALSE ;

\ попытка распознать строку asc # как значение угла вида 123°35'12"
\ допустимы только положительные значения угла
\ в случае успеха возвращается значение угла в угловых секундах и 2
\ в случае неуспеха возвращается 0
: agl>sec ( asc # --> ud 2 | 0 )
>nux *IF CASE [CHAR] ° OF D>L 0`3600 UD* DL> *IF min ELSE DDROP 2 THEN ENDOF
[CHAR] ' OF D>L 0`60 UD* DL> *IF sec ELSE DDROP 2 THEN ENDOF
[CHAR] " OF IFNOT DROP 2 ELSE TDROP FALSE THEN ENDOF
TDROP DDROP FALSE
ENDCASE
THEN
;

ALSO HIDDEN

\
: sAglLfa ( asc # vid --> lfa | 0 ) DROP \ vid словаря не нужен
agl>sec *IF DROP last-number D! LFA (vdlit) THEN ;

init: VOCABULARY \ создание стандартного словаря.
VOC-LIST A@ >L \ wordlist
['] sAglLfa L@ off_quest A!
0 L@ off_vtable A! \ отсутствует vtable
0 L@ off_last A! \ слов в словаре нет
['] no-mount L@ off_mount A!
['] no-umount L@ off_umount A!
&vinit L> off_vflags B!
;stop ANGLES

PREVIOUS

дальше
ALSO ANGLES
и можно вводить углы

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 21:58 
Мур:
Цитата:
Your application may need special number formats:
45'6 for 45ft.6in., an integer
1,000,000 an integer
$45.69 an integer
It is not hard to include such numbers in NUMBER, but you cannot include all possible formats. Some are incompatible:
3'9 for 3ft.9in.
12'30 for 12min.30sec. of arc
12'30 for 12min.30sec. of time
4'6 for 4 shillings 6 pence


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 22:07 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
gudleifr писал(а):
It is not hard to include such numbers in NUMBER, but you cannot include all possible formats. Some are incompatible:

Угу, только в данном случае это управляемо (настраиваемо).
Не хочешь углы, не добавляешь словарь в контекст, либо явно задаешь порядок словарей.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 22:16 
mOleg писал(а):
добавляешь словарь
Я понимаю слова Мура так:
Есть в твоей задаче такой формат?
Значит, когда будешь писать под нее Forth, в его NUMBER засунешь и его.
Но не раньше!

Изменить NUMBER , не меняя Forth?
Извращение, конечно, но вполе по силам.
1. У меня его функционал описывается регулярным выражением,
2. У Вас словари имеют свои FIND, почему же не могут иметь и свой NUMBER ?

В любом случае IF-ы, это слишком скучно.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 22:25 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
во-первых, причем тут NUMBER ? таки обычно распознавалка внутри INTERPRET
во-вторых, я засуну формат когда мне надо, точнее активно правя контекст могу включать и исключать распознавание любых вещей. Хочу - убираю распознавание чисел вообще, хочу, выбираю порядок "распознавалок" нужным мне образом. (в отличие, к примеру, от механизма NOTFOUND)

gudleifr писал(а):
Изменить NUMBER , не меняя Forth?

еще раз, NUMBER ни при чем

gudleifr писал(а):
У меня его функционал описывается регулярным выражением,

gudleifr писал(а):
В любом случае IF-ы, это слишком скучно.

имхо, дело вкуса.

gudleifr писал(а):
2. У Вас словари имеют свои FIND, почему же не могут иметь и свой NUMBER ?

утверждение не понял, посяни.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 22:34 
mOleg писал(а):
еще раз, NUMBER ни при чем
А распознавать числа где-то в другом месте - лишняя трата ресурсов, лишний источник ошибок...
gudleifr писал(а):
утверждение не понял, посяни.
В смысле у Вас FIND один на все словари?
Значит у меня склероз, мне казалось структура словарей у Вас была нефиксированной.
Или - в смысле разный NUMBER некуда цеплять?

A-a... Дошло... Но зачем вставлять "преобразователь" между FIND и NUMBER , если можно засунуть его в NUMBER ?


Последний раз редактировалось gudleifr Сб май 04, 2013 22:47, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 22:46 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
gudleifr писал(а):
А распознавать числа где-то в другом месте - лишняя трата ресурсов, лишний источник ошибок...

эхм, ну, вот в СПФ смотрим:
Код:
: INTERPRET_ ( -> ) \ интерпретировать входной поток
  BEGIN
    PARSE-NAME DUP
  WHILE
    SFIND ?DUP
    IF
         STATE @ =
         IF COMPILE, ELSE EXECUTE THEN
    ELSE
         S" NOTFOUND" SFIND
         IF EXECUTE
         ELSE 2DROP ?SLITERAL THEN
    THEN
    ?STACK
  REPEAT 2DROP
;

вообще NUMBER в стандарте отсутствует, есть >NUMBER

что же касается интерпретатора в форке:
Код:
\ интерпретировать одну лексему ?
: EVAL-TOKEN ( asc # --> )
             SFINDLFA
             *IF ?EXECUTABLE LINK>XTI
               ELSE DROP ?NOTFOUND
             THEN
             0 > IF EXECUTE ;THEN
                    REGULAR ;

\ интерпретировать входной поток ?
: (INTERPRET) ( --> )
              BEGIN NextWord *WHILE
                    EVAL-TOKEN ?STACK
              REPEAT DDROP ;

вобщем нету вообще ничего кроме словарей (оно проще выходит и гибче)

gudleifr писал(а):
В смысле у Вас FIND один на все словари?

каждый словарь ищет данные внутри себя сам, но SFIND один:
В кратце здесь.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 23:06 
Про NOFIND до меня, наконец, дошло.
Но мне кажется, это очень неудобно.
FIND ищет слова, NUMBER распознает литералы, какой-нибудь FDISK ищет ненайденные слова на диске... Каждый работает в своей области, не пересекаясь с остальными...

А так, допустим, мне надо умножить значение угла на целое...
Если оба числа распознаются NUMBER , мне плевать на контексты, и я могу вводить эти два числа в любом порядке...
А в Вашем случае я должен быть уверен, что "угловой" NOFIND правильно распознает еще и целые числа. А если потом мне понадобится ввести множитель по-римски?

Все. Идею уловил... Не буду Вас больше доставать, пока опять не забуду, что такое fork...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 23:23 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
gudleifr писал(а):
Про NOFIND до меня, наконец, дошло.Но мне кажется, это очень неудобно.

это просто достаточно неуправляемо (в отличие от контекста).

gudleifr писал(а):
FIND ищет слова, NUMBER распознает литералы, какой-нибудь FDISK ищет ненайденные слова на диске... Каждый работает в своей области, не пересекаясь с остальными...

это хорошо и плохо одновременно.
Единый механизм поиска все же заманчивее.

gudleifr писал(а):
А так, допустим, мне надо умножить значение угла на целое...Если оба числа распознаются NUMBER , мне плевать на контексты, и я могу вводить эти два числа в любом порядке...

с контекстом то же самое, только можно еще и задать приоритет (порядок).

gudleifr писал(а):
А в Вашем случае я должен быть уверен, что "угловой" NOFIND правильно распознает еще и целые числа.

так, стоп, NOFOUND (?) это вообще из дургой оперы.

по умолчанию в контексте находятся следующие словари:
ROOT NUMBERS FORTH
NUMBERS распознает целые числа и числа двойной длины, все.
если его убрать из контекста, числа вообще не будут распознаваться,
если, к примеру, хочется чтоб распознавались числа в формате с плавающей точкой, необходимо:
ALSO FLOAT

gudleifr писал(а):
Не буду Вас больше доставать

8) вы меня особо и не доставали

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 23:44 
Да, конечно, не NOFIND , а NOTFOUND ...
Тогда, допустим, все потребные контексты в наличии и я ввожу что-то вроде
2. 30° D*
или
30° 2. D*
как это пройдет по цепочке распознавателя (в [не]зависимости от порядка включения контекстов]?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Сб май 04, 2013 23:57 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
если в контексте: ROOT NUMBERS FORTH ANGLES
то в первом случае, т.е. 2. попытается распознать ANGLES, потом FORTH, вернет значение NUMBERS
30° вернет ANGLES, т.е. сразу же будет распознано

вообще, мне кажется, вы не очень хорошо понимаете как работает контекст, т.е. как устроен поиск в таком случае.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Вс май 05, 2013 00:03 
mOleg писал(а):
вы не очень хорошо понимаете как работает контекст
Черт, опять забыл, что Ваш путь - отказ от наследования лексиконов. Осталось выучить, что такое off_quest... А-а, "свой FIND"...
...
Блин, все равно, через задницу. И, все равно, будут конфликты. Проще NUMBER поправить, чем считать любую хрень с предвыборкой словарем.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Вс май 05, 2013 00:15 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
gudleifr писал(а):
Ваш путь - отказ от наследования лексиконов

ну, таки это в стандарте прописано 94.

gudleifr писал(а):
Осталось выучить, что такое off_quest...

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Вс май 05, 2013 00:30 
Еще чуть-чуть и Вы поймете, что слово WORD тоже является контекстом - с пустым off_quest . Круг замкется.
mOleg писал(а):
ну, таки это в стандарте прописано 94.
В стандарте, в данном случае прописано - делайте, как хотите, мы умываем руки.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: преобразование строкового представления угла вида 12°12'
СообщениеДобавлено: Вс май 05, 2013 00:44 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
gudleifr писал(а):
WORD

что есть слово WORD ?

gudleifr писал(а):
В стандарте, в данном случае прописано - делайте, как хотите, мы умываем руки.

там предложен механизм, который реализован в большинстве систем совместимых с ANSI X3.215-1994

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 67 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB