Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 18:25

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 85 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 17:24 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
Вариация на тему демонстрации "ручного" управления словариками в "класс" похожем варианте.
(черновой вариант кода привёл Kron73 в дискуссии на ЛОРе)
Код:

GET-CURRENT

VOCABULARY points
points DEFINITIONS
ALSO
: x ( p -- x ) @ ;
: y ( p -- y ) CELL+ @ ;
: draw ( p -- ) DUP x SWAP y  CR ." Draw point" ." x=" . ." y=" . PREVIOUS ;
PREVIOUS
SET-CURRENT

GET-CURRENT
VOCABULARY circles
circles DEFINITIONS
ALSO
: x ( p -- x ) @ ;
: y ( p -- y ) CELL+ @ ;
: radius ( p -- radius ) CELL+ CELL+ @ ;
: draw ( p -- ) DUP x OVER y ROT radius CR ." Draw circle x=" . ." y=" . ." radius=" . PREVIOUS ;
PREVIOUS
SET-CURRENT

: POINT ( x y --  ) CREATE , , DOES> ALSO points ;
: CIRCLE ( x y radius -- ) CREATE , , , DOES> ALSO circles ;

10 20 POINT p
30 40 50 CIRCLE c

p draw
c draw

: draw_point p [ ALSO points ] draw [ PREVIOUS ] ;
: draw_circle c [ ALSO circles ] draw [ PREVIOUS ] ;
draw_point
draw_circle


P.S. Тест данного кода пройден


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 20:19 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
true-grue писал(а):
Предлагаю разобрать более занятный вариант.

С точки зрения какой метрики будем рассматривать код?! ;)
По делу. зачем хранить число элементов в начале самого массива ? Обращение к элементу массива становится немного затруднено- всякий раз надо пордвигать указатель на еще одну ячейку. Да и код перегружен...
chess писал(а):
На манипуляторах это все проще делается: :)

Я заметил ...
Alex писал(а):
Вариант от Alexander можно немного упростить...

Хитрый Alex, решил сэкономить байты ;)

Лучше бы критику на изложение материала навели...
и есть идея "непонятки" в отдельную тему выделить перекрестными ссылками.
Пример - примером, а основные конструктивы надо бы доходчивым языком повторить для начинающих.

true-grue видимо про стек возвратов будет писать пример и объяснять
Alex про логические операции
Кора напишет про расширении словарей в ФОРТ
всем хватит места ;) админ ведь добрый. Правда ведь добрый?!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 20:46 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Хищник писал(а):
Я не думал, что это стоит разжевывать.

Я вот тоже не думал, что стоит разжевывать. Ну вот хотя бы это:
Хищник писал(а):
Неоднократно на форуме отмечалось, что набор символов, не образующий читаемые слова, труден для восприятия. Впечатление такое, что внутрь можно засунуть хоть "format c:", и оно там успешно замаскируется

Можно читать слова, но не понимать их смысл. Это не просто трудно для восприятия, это бессмысленно для восприятия.
Хищник писал(а):
3. Набор символов, который прочитать можно только при наличии под рукой таблицы, что чему соответствует.
Если взять слова ядра какой-либо форт-системы(штук 200), то пока вы их не запомните вам тоже может понадобиться
"таблица". Ну а дальше опять на горизонте появляется "впечатление", читай сваливание в субъективизм.

true-grue писал(а):
На векторном языке J делается еще проще: ({. , #)/.~ * arr

Я не сравнивал форт с языком J.
Манипуляторы это сокращенные записи слов форта вперемешку с сокращенными записями ограниченного числа параметров на стеке, представленных как локальные переменные. При этом как и в J появляется эффект видеобуфера - вот и все "сходство".

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 20:55 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Kopa писал(а):
Код chess в контексте его восприятия можно сравнить с использованием в практике регулярных выражений, что тоже требует некоторых навыков для использования и насколько удобно или нет без практики применения трудно сказать.

С регулярными выражениями можно сравнивать лексемы моего встроенного ассемблера, например:
A=B B=S A+B С=A\B и т.д. (очень много разных команд, что приближает их код к перечислимым величинам )
Манипуляторы это практически чистый форт.
А вот насчет практики верно замечено.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 21:02 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Alex писал(а):
Вариант от Alexander можно немного упростить,

Это верно, чисел-то кроме 0-х положительных и отрицательных нет.
Берется старый код, который как утверждают очень плохо читается :D и чуть меняется:
Код:
q-0+: ( a u -- n- n0 n+ ) 0 0 0  c( 1+! )
s+( ." q+ = " ) s-( ." q- = " ) s0( ." q0 = " )
5\01+0GI@'5!5y<i'2[c]e5Zi'3[c]tt`4N[s-]2.\[s0]3.\[s+]12-3-.\0'hfo ;

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 21:22 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 144
Благодарил (а): 0 раз.
Поблагодарили: 13 раз.
Alexander писал(а):
true-grue писал(а):
Предлагаю разобрать более занятный вариант.

С точки зрения какой метрики будем рассматривать код?! ;)
По делу. зачем хранить число элементов в начале самого массива ? Обращение к элементу массива становится немного затруднено- всякий раз надо пордвигать указатель на еще одну ячейку. Да и код перегружен...


О "метрике" я чуть выше написал достаточно пространно. Что-то мне подсказывает, что прописные истины, там изложенные, знакомы далеко не всем участникам форума. Единственное, могу предположить, что кое-кто совершенно иначе смотрит на программирование (на Форте): как на возможность "размять мозги" на отвлеченных задачках, сродни разгадыванию кроссвордов.

Ничего нового с хранением количества элементов в начале самого массива я не придумал. Во множестве интерпретаторов массивы хранятся, как структуры подобного вида. Счетчик можно записывать и по -1 индексу, если Вы настолько обеспокоены проблемой "продвижения указателя на еще одну ячейку". В программировании действует известная поговорка: "лучше день потерять, потом за пять минут долететь". В данном случае, не смотря на "перегруженность кода" мы имеем в результате локализацию данных и возможность передавать одним адресом всю информацию о нашем объекте-массиве. Впрочем, все, как всегда, зависит от задачи.

Теперь перейдем к критике. Основной вопрос -- в чем смысл этого примера? Нет, Ваша забота о начинающих, безусловно, трогательна, но на ум приходит еще одна поговорка -- " кто не умеет, тот учит". Был ли смысл соперничать с отличными классическими учебниками по Форту? Пример абсолютно примитивен. Программа написана в занудливом стиле Си. Только хуже, поскольку сомнительно, чтобы даже начинающий программист на Си принялся на пустом месте создавать глобальный массив Q. Индексация через результат SIGNUM лично меня не впечатлила, далеко тут до декларированной "изящности структуры". Реализация никаким образом не показывает новичку сильные стороны Форта. Я не хочу Вас обидеть, просто налицо типичная ситуация, когда человек, вместо того, чтобы писать серьезные прикладные программы и набираться соответствующего опыта, с удовольствием пишет "туториалы" для гипотетических новичков с отклонениями в умственном развитии. В то же самое время настоящие новички успешно учатся и без подобных "доброхотов", и за месяц-другой "набивают руку" на реальных задачах настолько хорошо, что оставляют далеко позади "идущих в народ" гуру.

Kopa писал(а):
Вариация на тему демонстрации "ручного" управления словариками в "класс" похожем варианте.
(черновой вариант кода привёл Kron73 в дискуссии на ЛОРе)


Люди со стороны по такому примеру могут составить весьма нелестное представление о Kron73, как о фортере. Это конечно не так. Вот оригинальное его сообщение: http://www.linux.org.ru/forum/developme ... nt-5421290 и даже это сообщение нужно понимать в контексте соответствующего обсуждения. Давайте все-таки становиться достойными того, чтобы на темы Форта наш форум цитировали на ЛОРе и хабре, а не наоборот.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 21:25 
chess писал(а):
Alex писал(а):
Вариант от Alexander можно немного упростить,

Это верно, чисел-то кроме 0-х положительных и отрицательных нет.
Берется старый код, который как утверждают очень плохо читается :D и чуть меняется:
Код:
q-0+: ( a u -- n- n0 n+ ) 0 0 0  c( 1+! )
s+( ." q+ = " ) s-( ." q- = " ) s0( ." q0 = " )
5\01+0GI@'5!5y<i'2[c]e5Zi'3[c]tt`4N[s-]2.\[s0]3.\[s+]12-3-.\0'hfo ;

На самом деле - что в лоб, что по лбу... Этот "практически чистый Форт" не читается ни в одном глазу. Набор скобок (которые в т.ч. и комментарии) плюс некая непонятная строка символов...
Уж простите, то нам до телепатов еще очень далеко...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 23:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Код:
\ переменные и работа с ними
VARIABLE ZEROES       : Z++ 1 ZEROES +! ;
VARIABLE NEGATIVES  : N++ 1 NEGATIVES +! ;
VARIABLE  POZITIVES  : P++ 1 POZITIVES +! ;
: INITS 0 ZEROES ! 0 NEGATIVES ! 0 POZITIVES ! ;
: PRINT-RES  CLS CR CR
   ." НУЛЕЙ: " ZEROES @ . CR
   ." ПОЛОЖИТЕЛЬНЫХ: " POZITIVES @ . CR
   ." ОТРИЦАТЕЛЬНЫХ: " NEGATIVES @ . CR
;
\ A -АДРЕС РАЗМЕЩЕНИЯ МАССИВА
\ N - КОЛИЧЕСТВО ЯЧЕЕК МАССИВА
: +0-COUNT (A N --> ) 
    INITS \ обнуляем счетчики
    0 DO \ цикл по массиву
        DUP I CELLS + @ \ i-й элемент массива
        DUP  0= IF Z++ THEN \ считаем нули
        DUP  0> IF P++ THEN \ считаем плюсы
        DUP  0< IF N++ THEN \ считаем минусы
        DROP \ элемент обработали - и удалили со стека
    LOOP
    DROP \ адрес массива тоже теперь не нужен
   PRINT-RES \ выводим результат
;
CLS DECIMAL 0 100 +0-COUNT \  для теста берем кусок данных
\ из начала форт-системы вместо длинного задания массива

ПРОВЕРЯЮ В СВОЕМ ФОРТЕ
Цитата:
Sprinter-FORTH ver 0.07

НУЛЕЙ: 19
ПОЛОЖИТЕЛЬНЫХ: 50
ОТРИЦАТЕЛЬНЫХ: 31

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 23:10 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
WingLion писал(а):
DUP 0= IF Z++ THEN \ считаем нули
DUP 0> IF P++ THEN \ считаем плюсы
DUP 0< IF N++ THEN \ считаем минусы


Лучше пару ELSE влепить


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 23:27 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Alexander писал(а):
Лучше пару ELSE влепить

интересно, чем лучше?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 23:31 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
WingLion писал(а):
Alexander писал(а):
Лучше пару ELSE влепить

интересно, чем лучше?

Цитата:
?DUP IF Z++ ELSE \ считаем нули
0> IF P++ ELSE \ считаем плюсы
N++ THEN \ считаем минусы

Вроде этим... толко глубину стека данных вот мог я нарушить тут
Код:
?DUP  IF
0> IF P++  \ считаем плюсы
ELSE  N++ THEN \ считаем минусы
ELSE  Z++ THEN \ считаем нули


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 23:42 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Alexander писал(а):
Вроде этим... толко глубину стека данных вот мог я нарушить тут

смахивает на экономию спичек, однако...

не всегда оно полезно, а вот, если вдруг надо не только минусы, плюсы и нули считать, а, например, и единички, в моем варианте модификация прозрачна, а с кучей else выходит запутывание вероятного студента...

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 23:51 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
chess писал(а):
Можно читать слова, но не понимать их смысл. Это не просто трудно для восприятия, это бессмысленно для восприятия.

Если у человека отклонения в умственном развитии, то он действительно будет читать слова и не понимать смысл. Но разве для таких людей предназначено программирование?
chess писал(а):
Если взять слова ядра какой-либо форт-системы(штук 200), то пока вы их не запомните вам тоже может понадобиться
"таблица". Ну а дальше опять на горизонте появляется "впечатление", читай сваливание в субъективизм.

Тем не менее, у Форта постоянно отмечается возможность создания новых имен, улучшающих восприятие текста. А не странных мнемоник, ее ухудшающих. Если мне не понравится DUP, я введу слово ДУБЛИРОВАТЬ. Не то чтобы в этом был весь смысл, но это степень свободы, доступная программисту.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 23:53 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
WingLion писал(а):
выходит запутывание вероятного студента...

Выходит , просто три прохода по одному массиву.
Хотя современные процесоры сами лишнее уберут сравнения наверняка. я их так близко не щупал ...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Учимся на примерах...
СообщениеДобавлено: Пн дек 17, 2012 23:56 
Не в сети
Administrator
Administrator
Аватара пользователя

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

три прохода, это, когда три раза DO LOOP по массиву, а у меня всего лишь три сравнения на элемент и один проход.
И сравнения такие, что однозначно определяют, попадает ли элемент в нужную категорию или нет - попал -> считаем, не попал - следующее сравнение. А оптимизация сравнений - это уже другой марлезонский балет...

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


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

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


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

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


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

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