Forth http://www.fforum.winglion.ru/ |
|
преобразование строкового представления угла вида 12°12'12" http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2929 |
Страница 1 из 5 |
Автор: | mOleg [ Сб май 04, 2013 21:47 ] |
Заголовок сообщения: | преобразование строкового представления угла вида 12°12'12" |
source file: alp.fts дальше ALSO ANGLES и можно вводить углы |
Автор: | gudleifr [ Сб май 04, 2013 21:58 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
Мур: Цитата: 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 |
Автор: | mOleg [ Сб май 04, 2013 22:07 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): It is not hard to include such numbers in NUMBER, but you cannot include all possible formats. Some are incompatible: Угу, только в данном случае это управляемо (настраиваемо). Не хочешь углы, не добавляешь словарь в контекст, либо явно задаешь порядок словарей. |
Автор: | gudleifr [ Сб май 04, 2013 22:16 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
mOleg писал(а): добавляешь словарь Я понимаю слова Мура так:Есть в твоей задаче такой формат? Значит, когда будешь писать под нее Forth, в его NUMBER засунешь и его. Но не раньше! Изменить NUMBER , не меняя Forth? Извращение, конечно, но вполе по силам. 1. У меня его функционал описывается регулярным выражением, 2. У Вас словари имеют свои FIND, почему же не могут иметь и свой NUMBER ? В любом случае IF-ы, это слишком скучно. |
Автор: | mOleg [ Сб май 04, 2013 22:25 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
во-первых, причем тут NUMBER ? таки обычно распознавалка внутри INTERPRET во-вторых, я засуну формат когда мне надо, точнее активно правя контекст могу включать и исключать распознавание любых вещей. Хочу - убираю распознавание чисел вообще, хочу, выбираю порядок "распознавалок" нужным мне образом. (в отличие, к примеру, от механизма NOTFOUND) gudleifr писал(а): Изменить NUMBER , не меняя Forth? еще раз, NUMBER ни при чем gudleifr писал(а): У меня его функционал описывается регулярным выражением, gudleifr писал(а): В любом случае IF-ы, это слишком скучно. имхо, дело вкуса. gudleifr писал(а): 2. У Вас словари имеют свои FIND, почему же не могут иметь и свой NUMBER ? утверждение не понял, посяни. |
Автор: | gudleifr [ Сб май 04, 2013 22:34 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
mOleg писал(а): еще раз, NUMBER ни при чем А распознавать числа где-то в другом месте - лишняя трата ресурсов, лишний источник ошибок...gudleifr писал(а): утверждение не понял, посяни. В смысле у Вас FIND один на все словари?Значит у меня склероз, мне казалось структура словарей у Вас была нефиксированной. Или - в смысле разный NUMBER некуда цеплять? A-a... Дошло... Но зачем вставлять "преобразователь" между FIND и NUMBER , если можно засунуть его в NUMBER ? |
Автор: | mOleg [ Сб май 04, 2013 22:46 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
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 один: В кратце здесь. |
Автор: | gudleifr [ Сб май 04, 2013 23:06 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
Про NOFIND до меня, наконец, дошло. Но мне кажется, это очень неудобно. FIND ищет слова, NUMBER распознает литералы, какой-нибудь FDISK ищет ненайденные слова на диске... Каждый работает в своей области, не пересекаясь с остальными... А так, допустим, мне надо умножить значение угла на целое... Если оба числа распознаются NUMBER , мне плевать на контексты, и я могу вводить эти два числа в любом порядке... А в Вашем случае я должен быть уверен, что "угловой" NOFIND правильно распознает еще и целые числа. А если потом мне понадобится ввести множитель по-римски? Все. Идею уловил... Не буду Вас больше доставать, пока опять не забуду, что такое fork... |
Автор: | mOleg [ Сб май 04, 2013 23:23 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): Про NOFIND до меня, наконец, дошло.Но мне кажется, это очень неудобно. это просто достаточно неуправляемо (в отличие от контекста). gudleifr писал(а): FIND ищет слова, NUMBER распознает литералы, какой-нибудь FDISK ищет ненайденные слова на диске... Каждый работает в своей области, не пересекаясь с остальными... это хорошо и плохо одновременно. Единый механизм поиска все же заманчивее. gudleifr писал(а): А так, допустим, мне надо умножить значение угла на целое...Если оба числа распознаются NUMBER , мне плевать на контексты, и я могу вводить эти два числа в любом порядке... с контекстом то же самое, только можно еще и задать приоритет (порядок). gudleifr писал(а): А в Вашем случае я должен быть уверен, что "угловой" NOFIND правильно распознает еще и целые числа. так, стоп, NOFOUND (?) это вообще из дургой оперы. по умолчанию в контексте находятся следующие словари: ROOT NUMBERS FORTH NUMBERS распознает целые числа и числа двойной длины, все. если его убрать из контекста, числа вообще не будут распознаваться, если, к примеру, хочется чтоб распознавались числа в формате с плавающей точкой, необходимо: ALSO FLOAT gudleifr писал(а): Не буду Вас больше доставать ![]() |
Автор: | gudleifr [ Сб май 04, 2013 23:44 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
Да, конечно, не NOFIND , а NOTFOUND ... Тогда, допустим, все потребные контексты в наличии и я ввожу что-то вроде 2. 30° D* или 30° 2. D* как это пройдет по цепочке распознавателя (в [не]зависимости от порядка включения контекстов]? |
Автор: | mOleg [ Сб май 04, 2013 23:57 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
если в контексте: ROOT NUMBERS FORTH ANGLES то в первом случае, т.е. 2. попытается распознать ANGLES, потом FORTH, вернет значение NUMBERS 30° вернет ANGLES, т.е. сразу же будет распознано вообще, мне кажется, вы не очень хорошо понимаете как работает контекст, т.е. как устроен поиск в таком случае. |
Автор: | gudleifr [ Вс май 05, 2013 00:03 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
mOleg писал(а): вы не очень хорошо понимаете как работает контекст Черт, опять забыл, что Ваш путь - отказ от наследования лексиконов. Осталось выучить, что такое off_quest... А-а, "свой FIND"...... Блин, все равно, через задницу. И, все равно, будут конфликты. Проще NUMBER поправить, чем считать любую хрень с предвыборкой словарем. |
Автор: | mOleg [ Вс май 05, 2013 00:15 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): Ваш путь - отказ от наследования лексиконов ну, таки это в стандарте прописано 94. gudleifr писал(а): Осталось выучить, что такое off_quest... смещение внутри структуры, описывающей словарь. собственно, я уже приводил выше ссылку, где описано как все устроено. |
Автор: | gudleifr [ Вс май 05, 2013 00:30 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
Еще чуть-чуть и Вы поймете, что слово WORD тоже является контекстом - с пустым off_quest . Круг замкется. mOleg писал(а): ну, таки это в стандарте прописано 94. В стандарте, в данном случае прописано - делайте, как хотите, мы умываем руки.
|
Автор: | mOleg [ Вс май 05, 2013 00:44 ] |
Заголовок сообщения: | Re: преобразование строкового представления угла вида 12°12' |
gudleifr писал(а): WORD что есть слово WORD ? gudleifr писал(а): В стандарте, в данном случае прописано - делайте, как хотите, мы умываем руки. там предложен механизм, который реализован в большинстве систем совместимых с ANSI X3.215-1994 |
Страница 1 из 5 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |