Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср окт 23, 2019 13:47

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 70 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 06, 2009 02:14 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6808
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
вопрос писал(а):
Префиксы - всему, что не десятичное и, может быть, вообще всему, что может вызвать разночтение

Но ведь бывают полезны случаи, когда установка системы счисления, отличной от 10, удобна или попросту является единственным вариантом. К примеру, я так устанавливаю выводы для матричных корпусов ПЛИС - любая цифробуквенная комбинация является правильным числом в системе счисления с основанием 36. Префиксы тут лишние.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 06, 2009 08:12 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
ну, тогда следует быть до конца последовательными и вместо "установки системы счисления" ввести "установку режима распознавания" - с префиксами или без


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 06, 2009 10:42 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6808
Благодарил (а): 16 раз.
Поблагодарили: 110 раз.
вопрос писал(а):
ну, тогда следует быть до конца последовательными и вместо "установки системы счисления" ввести "установку режима распознавания" - с префиксами или без

Это разные вещи. Установка системы счисления производится модификацией системной переменной со всеми вытекающими - можно вычислять требуемое основание, заводить его туда из таблицы, в процессе ввода чисел из файла предварять каждое число установкой нужной системы и т.д. А когда число само по себе содержит спецификатор, он влияет только на преобразование текущего числа.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт авг 06, 2009 21:18 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
WingLion писал(а):
вопрос писал(а):
и 0 (NULL) перед восьмеричными

точно NULL, а не OCTAL?

из древнего руководства пользователя С++
Цитата:
Целочисленные константы

Целочисленные константы могут быть десятичными (основа-
ние системы счисления 10), восьмеричными (основание 8 ) или
шестнадцатиричными (основание 16). При отсутствии переопре-
деляющих суффиксов типданныхцелочисленной константы выводит-
ся из ее значения, как показано в таблице 1.6. Отметим, что
правила для десятичных и не-десятичных констант различны.

Десятичные константы

Допустимыми являются десятичные константы величиной от
0 до 4,294,967,295. Константы, выходящие за указанные преде-
лы, вызывают ошибку. Десятичныеконстанты не могут иметь ве-
дущие нули. Целочисленнаяконстанта с ведущим нулем рассмат-
риваетсякак восьмеричная. Таким образом,

int i = 10; /* десятичное 10 */
int i = 010; /* десятичное 8 */
int i = 0; /* десятичное 0 = восьмеричному 0! */

Отрицательные константы- это просто константы без
знака, к которым применена унарная операция минус.

Восьмеричные константы

Все константыс ведущим нулем рассматриваются как вось-
меричные.Если восьмеричная константа содержит недопустимые
цифры 8 или 9, выдается сообщение об ошибке. Ошибка будет
также выдаваться при превышении восьмеричной константой зна-
чения 037777777777.

Шестнадцатиричные константы

Все константы, начинающиеся с 0x (или 0X) рассматрива-
ются как шестнадцатиричные. Шестнадцатиричные константы,пре-
вышающие 0xFFFFFFFF, приводят к ошибке.

Суффиксы длинных констант и констант без знака

Если законстантой следует суффикс L (или l), то такая
константа будет представлена как длинная (типа long).Анало-
гичным образом, суффикс U (или u) делает константу констан-
той без знака (unsigned). Если численное значение константы
превышает десятичное 65,535, независимо от используемого ос-
нованиясистемы счисления, то такая константа будет иметь тип
unsigned long. Суффиксы можно указывать для одной и той же
константы в произвольном порядке и набирать в любом регист-
ре: ul, lu, UL и т.д.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 07, 2009 03:47 
Не в сети
Moderator
Moderator
Аватара пользователя

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

<pre>
в данной Форт-системе есть ряд отличий и в том, как распознаются числа,
и в том, какой формат записи чисел принят.

Во-первых, числа в системе не отличаются от обычных слов с точки зрения
транслятора, так как числа распознает специальный словарь NUMBERS .
Соответственно, порядок поиска (ORDER) определяет момент, в который будут
распознаваться числа, к примеру, его можно оставить на вершине контекста,
тогда всякие шутки, типа:
: 2 3 ;
работать не будут, так как число 2 будет распознаваться раньше
(кстати, словарь NUMBERS нельзя сделать текущим, то есть в него ничего
нельзя компилировать). В обычном состоянии, то есть после выполнения
слова ONLY в контексте остается ТРИ словаря в следующем порядке:
NUMBERS ROOT FORTH
причем, FORTH находится на вершине контекста.
Словарь NUMBERS описан в .\kernel\vocabs\numbers.f

Форт-система распознает числа, представленные следующим образом:
1) 1234567 то есть положительное число одинарной длины,
2) -123456 то есть отрицательное число одинарной длины,
3) 0xABCDEF положительное число одинарной длины в шестндцатиричной
системе счисления,
4) -0x42DF0 отрицательное число одинарной длины в шестнадцатиричной
системе счисления.
Надо заметить, что число может быть и двойной длины, но тогда в STDERR
будет выдаваться предупреждение о том, что вместо числа одинарной длины,
введено число двойной длины, но только предупреждение, то есть процесс
трансляции прерываться не будет

5) 123:456 - положительное число двойной длины, возможен вариант :123,
в случае ведущего нуля,
6) -123:64 - отрицательное число двойной длины, возможне вариант -:123,
в случае ведущего нуля,

Символ ':' разделяет значение старшей и младшей ячеек числа, то есть
запись: 123:456 оставит на вершине стека данных два числа одинарной
длины: 456 123
таким образом длинные числа так вводить нельзя.

7) 123`456`789 - положительное число двойной длины,
8) -12`345`678 - отрицательное число двойной длины,
так же возможно использование префикса '0x' .

Замечу, что возможны следующие варианты записи чисел:
`12345
123``456
1`2`3`4`5
0x'123
-0x1234`56
то есть символ ` лишь является признаком двойного числа, и может
присутствовать в числе в любом удобном количестве.
</pre>
прошу критиковать (разумно) и предлагать возможные(необходимые) дополнения

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 07, 2009 06:26 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
про BASE ничего не сказано.
Или NUMBERS от него уже не зависит? :shock:

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 07, 2009 10:44 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
возможно, не стоило бы отбрасывать лидирующий ноль в :123
и, наверное, также не стоит допускать ` на первую позицию,
(т.е. число должно начинаться с цифры или знака -,
а далее следует всё, что требуется заданным форматом).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 07, 2009 12:59 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
прошу критиковать (разумно) и предлагать возможные(необходимые) дополнения
я думаю, что решение неплохое


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 07, 2009 15:40 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 20 раз.
Поблагодарили: 58 раз.
WingLion писал(а):
про BASE ничего не сказано.
Или NUMBERS от него уже не зависит?

да, действительно забыл 8( ща добавлю 8)
хотя доля правды в этом есть, BASE в форке практически не нужен, разве, что только для вывода чисел.
по крайней мере практически все слова, ранее работающие с BASE получают "текущую систему счисления" в явном виде на стеке данных, например:
>number ( ud asc # base --> ud asc # )

garbler писал(а):
возможно, не стоило бы отбрасывать лидирующий ноль в :123
и, наверное, также не стоит допускать ` на первую позицию,
(т.е. число должно начинаться с цифры или знака -,
а далее следует всё, что требуется заданным форматом).

ок, согласен, хотя я лично привык писать двойные числа так: .213 хотя, чаще даже так .0 :)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 07, 2009 16:40 
Не в сети
Moderator
Moderator
Аватара пользователя

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


В данной Форт-системе есть ряд отличий и в том, как распознаются числа, и в том, какой формат записи чисел принят (по сравнению с ANSI94).

Стандартно система работает только с целыми числами одинарной точности (32 бита), и двойной точности (64 бита). Числа в памяти системы хранятся так же, как принято на базовой платформе, то есть в дополнительном коде.

Распознавание чисел в системе не отличается от работы с обычными словами с точки зрения транслятора, так как числа распознает специальный словарь NUMBERS . Соответственно, порядок поиска (ORDER) определяет момент, когда будут распознаваться числа, к примеру, его можно оставить на вершине контекста, тогда всякие шутки, типа:
: 2 3 ;
работать не будут, так как число 2 будет распознаваться раньше (словарь NUMBERS нельзя сделать текущим, то есть в него ничего нельзя компилировать).

В обычном состоянии, то есть после выполнения слова ONLY в контексте остается ТРИ словаря в следующем порядке:
NUMBERS ROOT FORTH
FORTH находится на вершине контекста.
То есть распознавание чисел в системе можно убрать вообще, убрав из контекста словарь NUMBERS . Соответственно, можно добавлять в контекст свои собственные словари, которые будут распознавать числа других форматов и видов записи, к примеру .\samples\sketches\fixed.fts, работающий с числами с фиксированной точкой. Словарь NUMBERS описан в .\kernel\vocabs\numbers.f

Форт-система, точнее словарь NUMBERS , распознает числа, представленные следующим образом:

1) 1234567 то есть положительное число одинарной длины,
2) -123456 то есть отрицательное число одинарной длины,

3) 0xABCDEF положительное число одинарной длины в шестндцатиричной системе счисления,
4) -0x42DF0 отрицательное число одинарной длины в шестнадцатиричной системе счисления.
Заглавные и прописные символы не различаются, то есть можно писать как: 0x1DEC, так и: 0x1dEc . Надо отметить, что число может быть и двойной длины, но тогда в STDERR будет выдаваться предупреждение о том, что вместо числа одинарной длины, введено число двойной длины, но только предупреждение, то есть процесс трансляции прерываться не будет

5) 123:456 - положительное число двойной длины,
6) -123:64 - отрицательное число двойной длины,

Символ ':' разделяет значение старшей и младшей ячеек числа, то есть
запись: 123:456 оставит на вершине стека данных два числа одинарной
длины: 456 123 - таким образом, длинные числа так вводить нельзя.

7) 123`456`789 - положительное число двойной длины,
8) -12`345`678 - отрицательное число двойной длины, так же возможно использование префикса '0x' .

возможны следующие варианты записи длинных чисел:
123``456
1`2`3`4`5
0x`123
-0x1234`56
то есть символ ` лишь является признаком двойного числа, и может присутствовать в числе в любом удобном месте (только не первым и не последним символом) и количестве. Выход за пределы разрядности двойного числа не определяется!

Кроме перечисленного, в системе существует глобальная переменная BASE, которая определяет текущую систему счисления. Переключение текущей системы счисления производится с помощью слов HEX и DECIMAL , кроме того, текущую систему счисления можно задать принудительно, записав значение основания системы в переменную BASE, к примеру: 0x0A BASE ! или 8 BASE ! ; принятое ограничение сверху – 36 , то есть все цифры и буквы латинского алфавита (напомню, что при преобразовании заглавные и прописные символы не различаются).

Обычно, после возникновения ошибки в консоли, либо при трансляции файла текущая система счисления сбрасывается в десятичную, что не всегда удобно ( к примеру во время отладки аппаратуры удобно работать только в 16-ричной системы). Поэтому в данной системе введено слово always, устанавливающее систему счисления по умолчанию, например: HEX always .

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт авг 07, 2009 23:38 
Не в сети
Аватара пользователя

Зарегистрирован: Чт апр 26, 2007 21:09
Сообщения: 286
Благодарил (а): 12 раз.
Поблагодарили: 10 раз.
А уважаемому сообществу не кажется несколько странным обсуждение данной темы в таком количестве сообщений?
Мы же не в 1959 году, вообще-то...
Даже если дело касается Форта, есть уже устоявшиеся "стандарты" (привычные формы) записи чисел в подавляющем большинстве языков программирования.
В конце концов, слово NUMBER можно реализовать по одному в каждом из каких-либо соответствующих словарях/библиотеках...

В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 08, 2009 10:40 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"...

Любой язык можно поделить на 2-3 слоя
Код:
--------------------------------------------------------------
слой собственно пользователя (программиста)
--------------------------------------------------------------
слой расширений (готовых решений и средств для удобства)
--------------------------------------------------------------
слой ключевых идей (определяет сам язык)
--------------------------------------------------------------

слой ключевых идей не подвергается изменениям - это опредление языка и он ограничен в обьёме (иначе язык невозможно было бы выучить)

над ним присутствует слой расширений (для С это библиотеки, подключаемые в h файлах) - что-то, что может быть а может и не быть в языке, что не определяет язык, но делает его намного производительнее.
А программист находится на слое программиста - изучив язык, пользуется доступными решениями, выбирает модификацию языка или компилятор с библиотеками.

Будучи расширяемым, форт имеет совсем непроработанным 2 слой - отсюда эти проблемы - там где можно сделать как угодно, ничего как правило сделано не будет


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб авг 08, 2009 17:52 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4997
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 20 раз.
Поблагодарили: 58 раз.
Wlad писал(а):
В данной ветке, как в капле - море, отражается причинность вопроса "почему Форт не столь популярен"...

мне это странно слышать\видеть, так как в данной ветке идет обсуждение как лучше организовать ввод чисел с точки зрения пользователя(программиста) в конкретной Форт-системе (см. раздел).
Поэтому ваш коментарий мне совсем не ясен.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 10:00 
Не в сети
Аватара пользователя

Зарегистрирован: Вт сен 11, 2007 11:07
Сообщения: 187
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
to Wlad:
вопрос писал(а):
Будучи расширяемым, форт имеет совсем непроработанным 2 слой - отсюда эти проблемы - там где можно сделать как угодно, ничего как правило сделано не будет

вот-вот, характерный пример - Perl, например, там до сих пор нет именованных параметров в процедурах/функциях.
т.е. на самом деле они очень легко реализуются библиотечкой в десяток строчек текста, и таких библиотечек
десятки, но нет ни одной стандартной. причём таких моментов (как с параметрами) можно назвать много.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн авг 10, 2009 10:30 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
0xABCDEF положительное число одинарной длины в шестндцатиричной системе счисления,
4) -0x42DF0 отрицательное число одинарной длины в шестнадцатиричной системе счисления.
Заглавные и прописные символы не различаются, то есть можно писать как: 0x1DEC, так и: 0x1dEc . Надо отметить, что число может быть и двойной длины, но тогда в STDERR будет выдаваться предупреждение о том, что вместо числа одинарной длины, введено число двойной длины, но только предупреждение, то есть процесс трансляции прерываться не будет
Забыл спросить, чему в реальности соответствуют отрицательные шестнадцатеричные числа


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

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


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

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


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

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