Forth
http://fforum.winglion.ru/

расширенные операторами стековые манипуляторы
http://fforum.winglion.ru/viewtopic.php?f=2&t=2740
Страница 22 из 27

Автор:  chess [ Сб июн 02, 2012 22:06 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

Хищник писал(а):
Надо ли ожидать еще одной технологии, призванной разрешить эту важную проблему?

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

Автор:  chess [ Пн июн 04, 2012 15:48 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

chess писал(а):
Язык мышления определяется информационным устройством человека, поэтому и устройство
языка управления должно определяться информационным устройством человека, а не компьютера.

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

Автор:  chess [ Чт июн 14, 2012 12:53 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

Манипуляторы даже при малом количестве параметров могут быть очень большими,
и при этом требуемый объем оперативного внимания остается в допуске.
Но 'видеобуфер' перестает помогать при длинной строке манипулятора.
Для разбивки одного манипулятора на куски, которые могут быть размещены в нескольких строках, а не в одной
можно склеивать куски манипулятора через символ склеивания. В данном случае пусть это будет символ '?'.

Демонстрационный пример реализации такого склеивания:
Код:
\ Склеивание нескольких лексем в одну через суффикс склеивания

USER-VALUE dps 0 TO dps USER-CREATE bufs 1024 USER-ALLOT  USER-VALUE pr? 0 TO pr?

: NOTFOUND ( a u ) u! a!
  a u + 1- C@ '?' = DUP TO pr?
  IF a bufs dps + u 1- MOVE dps u 1- + TO dps
  ELSE pr? 0=
       IF a bufs dps + u MOVE dps u + TO dps bufs dps TYPE CR 0 TO dps 0 TO pr? THEN
  THEN ;

STARTLOG

: s
ttt?
rrr?
yyy
666?
www
ppp ;
лог компиляции
Код:
tttrrryyy
666www
ppp

Ok

Автор:  chess [ Пт июн 22, 2012 13:56 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

Реализовал возможность разрывать манипуляторы с помощью суффикса '?':
( https://github.com/chess2007/-chess/blob/master/LIB/manipulators.spf )
Код:
USER-VALUE dpstr 0 TO dpstr USER-CREATE buffstr 1024 USER-ALLOT  USER-VALUE flsym? 0 TO flsym?

: NOTFOUND ( a u ) u! a!
  a u + 1- C@ '?' =
  IF a buffstr dpstr + u 1- MOVE dpstr u 1- + TO dpstr 1 TO flsym?
  ELSE flsym? 
       IF a buffstr dpstr + u MOVE dpstr u + TO dpstr buffstr dpstr NOTFOUND 0 TO dpstr EXIT
       ELSE a u NOTFOUND 0 TO flsym? EXIT THEN
  THEN ;


Тестовая задачка для проверки: Реализация быстрой сортировки массива байтов
Код:
quicksortbytes: ( a u -- a u )
1024 acb]                              \ создание массива счетчиков байтов
acb 1024 4/23+2D`0IwL?                 \ обнуление массива счетчиков байтов
01+0DIb`4*2+[1+!]L?                    \ заполнение массива счетчиков байтов
0'4!23+2DI@`0GJ2-`4/4w4`1+'4!L`4N01 ;  \ запись отсортированных байт в исходный массив

\ EOF
T: arrb
34334547667dfsfgjh54356rtrtrfuyyuihGHDRFGDRTgfghfggf2122fdrtetreghdfhg354asdfdfd
7667dfsfgjh54356rtrtrfuyyopihjdjl;jy674597987986764rrdfjfgjhhojhokl-0=9=-9978655
fseghgujlklp9t67rupop]oopu78t5r56tuiop[opouiut6r56er56r6tyu0u09ii90u89y78ty78t87
guytuyguytyftrrt674547gjhjkuyfTGGYGIRTTRWErfygukhlkjopjuiotertrwetrfiuyouuuyt567
iuguiguyyrf354355476587698ygjhffsddfvbvnmlkopikpujkughuyrtgjhoiytuyguhuihiut6878
;
STARTLOG
arrb quicksortbytes TYPE
tst: arrb quicksortbytes ;  METER0 tst

log
Код:
    --00001222333333334444444444445555555555555555555666666666666666666666777777777777777
7777788888888888899999999999;==DDEFGGGGGHIRRRRTTTTWY[]abdddddddddddeeeeeeffffffffffffffff
ffffffffggggggggggggggggggggghhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiijjjjjjjjjjjjjjjjkkkkkkkkllll
llmnoooooooooooooopppppppppprrrrrrrrrrrrrrrrrrrrrrrsssssttttttttttttttttttttttttuuuuuuuuu
uuuuuuuuuuuuuuuuuuuuuuuvvwyyyyyyyyyyyyyyyyyyyyyy

8025  nsec
Ok

ps. 8 мксек для моего Core 2 Duo 3.00 GHz, это быстро.

Автор:  Alex [ Пт июн 22, 2012 18:24 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

chess писал(а):
Для разбивки одного манипулятора на куски, которые могут быть размещены в нескольких строках, а не в одной
можно склеивать куски манипулятора через символ склеивания. В данном случае пусть это будет символ '?'.
В моей версии подобную функцию могут выполнять м-блоки ( группа символов терминируемая символом _ )
разница в том, что у Вас части собираются вместе через буфер и далее интерпретируются как
единый манипулятор, а у меня каждый м-блок интерпретируется независимо как манипулятор.

Автор:  VoidVolker [ Пт июн 22, 2012 18:36 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

Что-то мне подсказывает, что идея стековых манипуляторов зашла слишком далеко и их сложность слишком велика для практического применения. Зачем вся эта сложность? Какие она дает преимущества перед обычной записью словами?

Автор:  WingLion [ Пт июн 22, 2012 19:10 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

chess писал(а):
34334547667dfsfgjh54356rtrtrfuyyuihGHDRFGDRTgfghfggf2122fdrtetreghdfhg354asdfdfd
7667dfsfgjh54356rtrtrfuyyopihjdjl;jy674597987986764rrdfjfgjhhojhokl-0=9=-9978655
fseghgujlklp9t67rupop]oopu78t5r56tuiop[opouiut6r56er56r6tyu0u09ii90u89y78ty78t87
guytuyguytyftrrt674547gjhjkuyfTGGYGIRTTRWErfygukhlkjopjuiotertrwetrfiuyouuuyt567
iuguiguyyrf354355476587698ygjhffsddfvbvnmlkopikpujkughuyrtgjhoiytuyguhuihiut6878


Осталось написать форт-систему одним 8-килобайтным стековым манипулятором...

Автор:  Antender [ Пт июн 22, 2012 19:33 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

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

Автор:  вопрос [ Пт июн 22, 2012 22:03 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

Цитата:
Реализовал возможность разрывать манипуляторы с помощью суффикса '?'

Но ведь вначале была цель получить наглядные, те, которые видны одним взглядом? :shock: :D

Автор:  vikt [ Вс июн 24, 2012 05:11 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

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

Автор:  Alex [ Вс июн 24, 2012 18:25 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

VoidVolker писал(а):
Зачем вся эта сложность? Какие она дает преимущества перед обычной записью словами?
да читать немного сложно, нужно внимание и концентрация. При некотором
навыке и опыте записи манипуляторов облегчается чтение, глазу уже видны штампы и клише.
При записи манипулятора иногда попадаешь в "поток" (chess а как часто у Вас это получается?)
экономная выборка ячеек манипулятора (1 символ) + краткая запись операции (1-2 символа)
позволяет писать программу символ за символом, не отвлекаясь на группировку и
перемещения слов, нет нужды в копи-пасте. Скорость записи манипулятора высока и
позволяет фиксировать мысль (алгоритм,программу) в соответствии с ее временным
течением и разворачиванием. Я пару раз попадал в "поток" и получил позитивные и
приятные ощущения, можно сказать поймал кайф.
WingLion писал(а):
chess писал(а):
34334547667dfsfgjh54356rtrtrfuyyuihGHDRFGDRTgfghfggf2122fdrtetreghdfhg354asdfdfd
7667dfsfgjh54356rtrtrfuyyopihjdjl;jy674597987986764rrdfjfgjhhojhokl-0=9=-9978655
fseghgujlklp9t67rupop]oopu78t5r56tuiop[opouiut6r56er56r6tyu0u09ii90u89y78ty78t87
guytuyguytyftrrt674547gjhjkuyfTGGYGIRTTRWErfygukhlkjopjuiotertrwetrfiuyouuuyt567
iuguiguyyrf354355476587698ygjhffsddfvbvnmlkopikpujkughuyrtgjhoiytuyguhuihiut6878
Это же несортированный входной массив, а манипулятор чуть выше :)
vikt писал(а):
Попробую реализовать основные операции стековых манипуляторов.
Удачи и успеха!

Автор:  Hishnik [ Вс июн 24, 2012 20:52 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

Alex писал(а):
Это же несортированный входной массив, а манипулятор чуть выше

Ну, еще не вечер! :)

Автор:  Alex [ Вт июн 26, 2012 18:32 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

Хищник писал(а):
Alex писал(а):
Это же несортированный входной массив, а манипулятор чуть выше

Ну, еще не вечер! :)

да в каждой шутке есть только доля шутки. не хотелось бы чтобы манипулятор
превращался в случайный набор несортированных букв, Вот тут я думаю
тоже есть доля шутки :) Чем лучше читабельность, тем хуже усваивается текст

Автор:  chess [ Пн июл 16, 2012 15:31 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

Alex писал(а):
В моей версии подобную функцию могут выполнять м-блоки ( группа символов терминируемая символом _ )

Для визуальной совместимости заменил суффикс '?' на '_'. :)
вопрос писал(а):
Но ведь вначале была цель получить наглядные, те, которые видны одним взглядом?

Ну так эта цель и осталась. Когда манипулятор становится длинным, то видеобуфер перестает работать(манипулятор не укладывается весь в "поле зрения", которое и есть видеобуфер). Текущая мысленная картинка перестает опираться на видимую картинку и темп набивания текста программы одним пальцем :) снижается.
Поле зрения оно где-то, наверное, ближе к квадратному, поэтому делим манипулятор на части, которые располагаем одна под другой.
Alex писал(а):
При записи манипулятора иногда попадаешь в "поток" (chess а как часто у Вас это получается?)
экономная выборка ячеек манипулятора (1 символ) + краткая запись операции (1-2 символа)
позволяет писать программу символ за символом, не отвлекаясь на группировку и
перемещения слов, нет нужды в копи-пасте. Скорость записи манипулятора высока и
позволяет фиксировать мысль (алгоритм,программу) в соответствии с ее временным
течением и разворачиванием. Я пару раз попадал в "поток" и получил позитивные и
приятные ощущения, можно сказать поймал кайф.

Если алгоритм представляю четко, то в "поток" попадаю всегда.
Но все-таки манипуляторы это только технологический прием, который эффективен в сочетании с другими средствами ( фортом, лок. словами, ассемблером и тп ).

Автор:  Alex [ Чт дек 20, 2012 13:19 ]
Заголовок сообщения:  Re: расширенные операторами стековые манипуляторы

уважаемый chess растолкуйте мне один моментик, ранее я полагал ( читал )
стековый манипулятор 1 2 3 3\ так -- положить в ячейку номер 1 значение 1,
в ячейку 2 значение 2, в ячейку 3 значение 3.
В последних постах параллельной темы я увидел, что сейчас у Вас это
трактуется так 1 2 3 3\ -- положить значение 1 в ячейку 0, значение 2 в ячейку 1
значенние 3 в ячейку 2.

Да раньше мы не могли загрузить ячейку 0 напрямую, так как задействован
спец. случай - манипуляторы начинающиеся с 0\ и 0| не берут параметров со стека.
сейчас в новой нотации ( индексации ) мы не можем загрузить ячейку 9 напрямую.

так ли это? а то надо будет переделать в своей реализации этот момент.
и еще прошу Вас зарезервировать за мной набор 'd* команд.

Страница 22 из 27 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/