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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 81 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Пн сен 04, 2017 20:52 
_KROL писал(а):
Ну, кто как видит
Все видят одинаково. Я неоднократно пытал программистов с целью найти того, кто помнит, зачем что-то было написано. Один раз поиск крайнего занял 3 года. Замечательный случай был у нас в лаборатории - две недели всем коллективом гоняли данные, чтобы в последний день залезть в стол и найти полугодовой давности отчет, по этим же данным, который сами же делали. И хоть бы кто за эти две недели вспомнил!

Поэтому самое важное преимущество FORTH - возможность записать решение "по ходу мысли": всю цепочку рассуждений, шаг за шагом.

Ethereal писал(а):
В условии сказано "любое подмножество".
Не было такого (в моем условии).

gudleifr писал(а):
5 CONSTANT N
А кто говорил о CONSTANT?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Пн сен 04, 2017 21:02 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
return true if any subset founded has sum=0 else false


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Пн сен 04, 2017 21:08 
Ethereal писал(а):
return true if any subset founded has sum=0 else false
У меня приведены решения другой задачи (в педагогических целях).
Впрочем, давайте выпендримся: я исправлю свое решение, чтобы решалась изначальная задачка, а Вы исправите свое (исправите, а не напишете новое), чтобы решалась моя...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Вт сен 05, 2017 01:19 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
а Вы исправите свое (исправите, а не напишете новое), чтобы решалась моя...
А не по Муровски : :lol:
Moreover, he was never satisfied with his own solutions to problems. Revisiting a computer or an application after a few years, he often re-wrote key code routines. He never re-used his own code without re-examining it for possible improvements. This later became a source of frustration to Rather, who, as the marketing arm of FORTH, Inc., often bid jobs on the assumption that since Moore had just done a similar project this one would be easy — only to watch helplessly as he tore up all his past code and started over.
gudleifr писал(а):
моя...
Я только из контекста догадываюсь в чем состоит она, ваша. Понял так, что надо вывести дающее в сумме ноль подмножество.

Чисто из принципа можно исправить :
Код:
CREATE DATA 5 , -3 , -2 , -6 , -3 ,

: ZADACA
  ( -- flag )
  0
  32 1 DO
    FALSE
    BEGIN
      NIP 0
      5 0 DO
        1 I LSHIFT J AND IF
          DATA I CELLS + @ ROT IF . TRUE ELSE + FALSE THEN SWAP
        THEN
      LOOP
      0=
    2DUP = UNTIL
    IF LEAVE THEN
  LOOP
;

ZADACA .( FLAG = ) . BYE
Если с PICK , то еще короче :
Код:
CREATE DATA 5 , -3 , -2 , -6 , -3 ,

: ZADACA
  ( -- flag )
  0
  32 1 DO
    FALSE
    BEGIN
      NIP 0
      5 0 DO
        1 I LSHIFT J AND IF
          DATA I CELLS + @ 2 PICK IF . ELSE + THEN
        THEN
      LOOP
      0=
    2DUP = UNTIL
    IF LEAVE THEN
  LOOP
;

ZADACA .( FLAG = ) . BYE
Но PICK это как-бы не тру.

Чтобы выводило ВСЕ результаты надо IF LEAVE THEN заменить на IF CR THEN


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Вт сен 05, 2017 11:44 
Ethereal писал(а):
А не по Муровски
Мы же не через год, а сейчас... Речь не о том, чтобы заранее предусмотреть в программе дыры для "улучшений", а о том, чтобы писать только то, что надо, не делая себя рабом структуры настолько, чтобы приходилось вставлять лишние циклы при попытке хоть что-то исправить...

Вопрос-то простейший: нужна "программа, поиска непустых подмножеств, имеющих нулевую сумму, множества из 5 чисел". Неясно, что именно она должна делать? Так пусть делает все.
Очевидно, что придется несколько раз пробежаться по всем 5-и элементам (ввести, проверить, вывести). Причем, нас будет интересовать позиция элемента в множестве (разряд в шкале). Так сделаем итератор. Почему я предлагаю столько лишних переменных? Вместо комментариев.

VARIABLE ДЕЙСТВИЕ
VARIABLE РАЗРЯД
: ДЛЯ-ВСЕХ ( CFA--) ДЕЙСТВИЕ ! 1 РАЗРЯД ! 5 0 DO
I ДЕЙСТВИЕ @ EXECUTE РАЗРЯД @ 2* РАЗРЯД ! LOOP ;

CREATE DATA 100 CELLS ALLOT
: -TH CELLS DATA + ;
: ВВОД ( N,I--) -TH ! ;

VARIABLE ВАРИАНТ
: ПОДХОДИТ ВАРИАНТ @ РАЗРЯД @ AND ;
: СУММА ( N1,I--N2) ПОДХОДИТ IF -TH @ + ELSE DROP THEN ;
: ВЫВОД ( I--) ПОДХОДИТ IF
DUP . ." (" -TH @ . ." ) " ELSE DROP THEN ;

: ЗАДАЧА ( N1...N5--)
['] ВВОД ДЛЯ-ВСЕХ РАЗРЯД @ 1 DO
I ВАРИАНТ !
0 ['] СУММА ДЛЯ-ВСЕХ 0= IF
CR ['] ВЫВОД ДЛЯ-ВСЕХ THEN LOOP ;

: ЗАДАЧА-2 ( N1...N5--F)
['] ВВОД ДЛЯ-ВСЕХ 0 РАЗРЯД @ 1 DO
I ВАРИАНТ !
0 ['] СУММА ДЛЯ-ВСЕХ 0= IF
DROP -1 LEAVE THEN LOOP ;

Самое же основное: я предлагаю пользователю язык обработки множества из 5-и элементов, на котором он может сам написать то, что нужно.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Вт сен 05, 2017 17:34 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
Самое же основное: я предлагаю пользователю язык обработки множества из 5-и элементов, на котором он может сам написать то, что нужно.
Ну а я работаю в области, где главный рефрен - чтоб ни одна сволочь не могла твой код модифицировать. Просто потому, что она тут-же побежит его продавать. http://www.karelmasters.com/ И это неизбежно накладывает отпечаток на стиль программирования. Только почему ты мой называешь "хуже некуда" ? В нем просто другие критерии хорошести и главный из них - наиболее кратко, потому-что иначе в камень не умнешь и ногами.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Вт сен 05, 2017 18:02 
Ethereal писал(а):
Только почему ты мой называешь "хуже некуда" ?
"Структура программы не зависит от задачи".

Я не вижу других преимуществ Forth в области "экономии времени исполнения и/или размера кода", кроме "любой дурак может реализовать Forth-компилятор". Мне больше нравится возможность прочесть и понять написанное десять лет назад. И нравится строить программу методом последовательных приближений (помните этот рисуночек Броуди?).
А оптимизировать я, скорее, готов Вашим Оберон-способом - написать очень медленную и тупую Forth-программу, которую можно будет научить компилировать хороший целевой код. Правда, очень редко сталкивался со случаями, когда проблему не решало бы простое удаление очевидной избыточности.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Вт сен 05, 2017 19:33 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
http://www.karelmasters.com/ Так ты там один? Зачем тогда наверху написано "Group", или ждёшь пополнения? :D
---
После прочтения этого понял тебя: http://satmaster.org.ua/index.php?topic=292.0


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Вт сен 05, 2017 22:20 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Нет, в этой группе два человека. Просто на свету один. Да и было это и прошло. Это все бурная молодость. Там-же один раздел так и называется "ностальгия". Просто ВУЗ был моим призванием, но в нем зарплаты бывало на продукты не хватало. Ну и вот к чему приходилось прикладывать мозги, чтобы денежных знаков поднять. А я хотел прикладывать мозги к науке. Но не вышло. А причины почему - в отечественной истории.
gudleifr писал(а):
Правда, очень редко сталкивался со случаями, когда проблему не решало бы простое удаление очевидной избыточности.
Когда проблему приходилось решать на GoldWafer чудом являлось уже то, что ее вообще удавалось решить. Загон в камень последнего байта (точнее 14-разрядного слова) бывало занимал неделю. Все как написано тут :
http://we.easyelectronics.ru/Asticon/is ... bayta.html
Ну на том сайте пример "Исходник той самой GoldWafer прошивки на НТВ+" там использованы все байты флеш, все байты RAM и все байты встроенного EEPROM. И там еще есть такие. И это не специально делалось. Это конечный результат вдавливания задачи в чип. А уж какие приемы для этого использовались - ну вот при вычислении DES всюду неявные счетчики цикла, многосмысленные переменные, круглые адреса массивов и циклы пока у инкрементирующегося указателя не выставится определенный бит, тотальное использование побочных эффектов кода, etc.
gudleifr писал(а):
Я не вижу других преимуществ Forth в области "экономии времени исполнения и/или размера кода"
По размеру кода - это просто песня. Сначала Форт- система отъедает изрядный кусок, но затем код начинает расти потихонечьку, потихонечку. Чтобы впихать в малую память чипа чудовищно-большой функционал лучше и не придумать.

Удивительно, но пока в GoldWafer все в итоге удачно запихивалось ассемблером.
Но наработка уже на готово была - разделить код на то, что должно выполняться
всегда быстрым процессором и то, что может исполняться медленным как черепаха.
Первую часть реализовать на ассемблере обычным способом, а вторую шитым
кодом и закинуть ее в 24c16 (внешнюю последовательную память, подрубленную
к микропроцессору) и по I2C ее подгружать на лету для интерпретации. Так
никто еще никогда не делал, но ведь без Форта и не сделать.
То бишь шитый код, который процессор должен побайтно подгружать извне.

З.Ы. Козырная фраза из той "Истории одного байта" :
Мы редко общаемся с обычными программерами — нам в общем не о чем разговаривать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 00:16 
Ethereal писал(а):
Чтобы впихать в малую память чипа чудовищно-большой функционал лучше и не придумать.
Простая арифметика это опровергает. Ведь, весь шитый код ничего не делает, работают только кодовые слова. Если большое количество шитого кода вызывает малое количество кода, то, скорее всего, большая часть кода - избыточные перетасовки данных. Если, наоборот, избыточность кода мала, то экономию на шитом коде не получить.

Ethereal писал(а):
Первую часть реализовать на ассемблере обычным способом, а вторую шитым кодом
Для этого FORTH не нужен. Даже в древних BASIC-ах и FoxBase+-ах была возможность втюхивания кода.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 01:17 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
то, скорее всего
Рассмотрите случай, когда это предположение не угадало.
gudleifr писал(а):
Для этого FORTH не нужен. Даже в древних BASIC-ах и FoxBase+-ах была возможность втюхивания кода.
Не влезут кишки ни Бейсика, ни FoxBase в голдвафер. Мне нужен не просто байт-код, а еще и чтобы интепретатор этого байт-кода места вообще не занимал. Чтобы не было ни CASE-выбора, ни вычисляемого перехода по таблице. А в шитом коде Форта интерпретатор как-раз вырожденный. Его почти-что нет. Собственно, мне нужен для данной задачи не сам Форт целиком, а часть примитивов от Форта + техника шитого кода Форта, а остальное при формировании результата отсечь.

З.Ы, Возможность втягивания нативного кода отсутствует. Ибо Гарвард.

А вообще, думаю, МК - это как-раз та ниша, в которой Форт помрет в последнюю очередь.


Последний раз редактировалось Ethereal Ср сен 06, 2017 01:59, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 01:52 
Ethereal писал(а):
Рассмотрите случай, когда это предположение не угадало.
Код с малой избыточностью, который хорошо сжимается?. Так не бывает.

Ethereal писал(а):
Его почти-что нет. Собственно, мне нужен для данной задачи не сам Форт целиком, а часть примитивов от Форта + техника шитого кода Форта, а остальное при формировании результата отсечь.
Попробуйте покурить тьюринговскую лекцию Бэкуса 77-го года.

Ethereal писал(а):
Не смотря на мнение Gudleifr.
Почему же "несмотря"? Мое мнение то же самое. FORTH - средство для тупого программиста и умного пользователя. Исключив умного пользователя, мы получаем идеальную нишевость метода. Пока будет железо, до которого у программистов не доходят руки, доморощенный шитый код будет востребован.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 02:03 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
gudleifr писал(а):
Код с малой избыточностью, который хорошо сжимается?.
А с чего он сжиматься-то хорошо начал ? Твое предположение "скорей всего" относилось к ситуации, когда шитого кода много. А много - это еще не означает хорошую сжимаемость.

Можно ли освободить программирование от стиля фон-Неймана? Вот эту ?

А по поводу третьей части ты хамить что-ль сюда пришел ?
gudleifr писал(а):
Пока будет железо, до которого у программистов не доходят руки,
Так ведь уже доходили, только они обсирались и уходили. Потому как не могли.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 10:07 
Ethereal писал(а):
А с чего он сжиматься-то хорошо начал ?
Дык, применение шитого кода - это разновидность сжатия. Выигрыш можно получить только при большой избыточности.

Ethereal писал(а):
Вот эту ?
Да.

Ethereal писал(а):
Так ведь уже доходили, только они обсирались и уходили.
Именно. Поэтому нишей ортодоксального FORTH и является маломощное непопулярное железо.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Самозапросы на форт-софт
СообщениеДобавлено: Ср сен 06, 2017 11:14 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Чего-то никакого удовольствия от такой писанины не получил :
Код:
VARIABLE N
VARIABLE СУММА
VECT     ДЕЙСТВИЕ

: 1<< ( i -- mask ) 1 SWAP LSHIFT ;
: ГДЕ ( i -- addr ) CELLS PAD + ;
: ВВОДИ ( x i -- ) ГДЕ ! ;
: ВЗЯТЬ ( i -- x ) ГДЕ @ ;
: КАНАЕТ?  ( mask i -- mask i flag ) 2DUP 1<< AND ;
: ПРОВЕРЯЙ ( mask i -- mask ) КАНАЕТ? IF ВЗЯТЬ СУММА +! ELSE DROP THEN ;
: ВЫВОДИ   ( mask i -- mask ) КАНАЕТ? IF ВЗЯТЬ .        ELSE DROP THEN ;
: ВСЕХ ( cfa -- ) TO ДЕЙСТВИЕ N @ 0 ?DO I ДЕЙСТВИЕ LOOP ;

: { DEPTH NEGATE N  ! ;
: } DEPTH        N +! ;
: ЗАДАЧА-НА-ВВОД        ['] ВВОДИ    ВСЕХ ;
: ЗАДАЧА-НА-ПРОВЕРКУ
  0
  N @ 1<< 1 DO
    СУММА !
                      I ['] ПРОВЕРЯЙ ВСЕХ DROP
    СУММА @ 0= DUP IF I ['] ВЫВОДИ   ВСЕХ DROP LEAVE THEN
  LOOP
;

{ 5 -8 -7 6 -2 4 9 -1 } ЗАДАЧА-НА-ВВОД
                        ЗАДАЧА-НА-ПРОВЕРКУ .( Флаг = ) .
BYE
От своего варианта выше с BEGIN UNTIL между двух DO перло. Там изюминка есть. От этого - нет.


Последний раз редактировалось Ethereal Ср сен 06, 2017 11:37, всего редактировалось 3 раз(а).

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

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


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

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


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

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