Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 01:41

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 09:50 
FORTH-программирование?

Ну и всюду, даже на PHP, стараюсь пользоваться Thinking Forth
/Balancer/

а можно и "выше", когда мы уже пишем "проблемно-ориентированный язык", наиболее выразительно описывающий задачу
/Я/

Итак, "Игра в 15".
Кажется, куда уж тупее (см. Дракон - http://fforum.winglion.ru/viewtopic.php?p=39567#p39567), но и здесь кУульНЫй фоРТеР может получить удовольствие.

Начнем с блок-схемы.
Для подобных игр она завсегда одна - http://www.gudleifr.h1.ru/52.html.
И очень похожа на наш Цикл Управления: основной цикл - чтение ПОТОКА, возврат по ПРОВЕРКЕ ввода - BADWORD, возврат по АВАРИИ - там же, где "нормальный" FORTH проверяет исчерпание стека.

Значит, мы строим FORTH-машину для игры в "15", надеясь получить выгоду от унификации ее с "обычной".

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

ПОТОК команд игрока. Возможно, видимо, только три варианта (тыкаем ли мы мышкой или бьем по клавишам): "координаты клетки", "стрелки" и "номер шашки".

ЗНАЧЕНИЕ - ходящая шашка (и координаты, и номер). Здесь же имеет смысл хранить текущее положение дырки. (И все, что нам еще может понадобиться для описания игровой ситуации).

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

СЛОВАРЬ - на первый взгляд он кажется фиксированным. Максимум, по команде для 15 шашек, для 4 стрелок и 16 клеток.
Однако, можно заметить, что допустимость этих команд меняется в зависимости от игровой позиции, точнее, от положения дырки. Значит, перемещая дырку, придется "перекомпилировать".

Теперь, пройдемся по Блок-Схеме.

ВВОД - понятно, самая "машинно-зависимая" часть программы (ОК + СИМВОЛ.EXPECT).

ПРОВЕРКА - проверка команды на допустимость (СИМВОЛ.FIND).

РАСЧЕТ - основная часть работы (ВЫПОЛНИТЬ).

АВАРИЯ - единственное, что имеет смысл проверять, не выиграна уже ли игра.

НАЧАЛО - тоже очевидно. Тут надо перемешать шашки случайным образом, не забывая, что должна быть соблюдена четность перестановок, иначе задача станет неразрешимой проще всего выполнить достаточно длинную случайную комбинацию команд-стрелок.

Теперь будем думать о реализации.

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

СИМВОЛ - три словаря - для клеток, шашек и стрелок (в зависимости от реализации, наверняка останется один. Например, при мышином клике очевидно будет получена клетка).
Задача СИМВОЛ - проверить на допустимость и вернуть наиболее полный вариант (клетка, шашка, стрелка, кол-во стрелок), потом обрежем, пока не будем заморачиваться.
Очевидно наличие двух массивов, реализующих функции шашка-клетка и клетка-шашка (которые, тоже надо будет постоянно "перекомпилировать").
Кроме того надо до трех матриц допустимости.
Пусть дырка расположена в клетке bbbb (их же всего 16).
Тогда матрица допустимости стрелок будет представлять массив четырех бит, соответствующих истиности попадания bbbb под шаблоны 00bb, 11bb, bb00, bb11.
А матрица допустимости шашек - единицы в соответствующем столбце и строке.
Матрицу допустимости шашек строить муторно, проще уже при вводе для шашки определить клетку и проверить последнюю.
Перевести и стрелки в клетки? Удобно, но матрицу стрелок все равно иметь надо, чтобы не выйти за пределы доски.
Итак, можно подвести итоги. Процедура СИМВОЛ должна уметь:
проверять на допустимость стрелки и клетки;
преобразовывать номер шашки и стрелки в координаты клетки.
Возвращать должна клетку.

Рассмотрим процедуру ВЫПОЛНИТЬ.
Она должна выяснить что и куда подвинуть, перекомпилировать массивы и проверить, не случилась ли победа.
В случае сдвига одной шашки все просто:
КЛЕТКА(ПУСТО) := ШАШКА(КЛЕТКА)
КЛЕТКА := ПУСТО
Однако, у нас может быть сдвиг до 3-х шашек:
КЛЕТКА(ДЫРКА) := ШАШКА(КЛЕТКА1)
КЛЕТКА(КЛЕТКА1) := ШАШКА(КЛЕТКА2)
КЛЕТКА(КЛЕТКА2) := ШАШКА(КЛЕТКА3)
КЛЕТКА3 := ДЫРКА
Т.е. имеет смысл разделить ХОД на ПОЛУХОД (перемещение шашки) и ПОСЛЕХОД (перемещение дырки).
Как получить КЛЕТКИ1-3 из просто клетки?
Очевидно, хорошо бы иметь "обратную стрелку", единичное приращение координат от дырки к клетке (видимо, надо добавить ее расчет в СИМВОЛ - как значение, возвращаемое словом-клеткой - или тупо считать здесь разности).
ПОЛУХОД очевидно автоматически компилирует таблицу клетка-шашка, но надо добавить компиляцию и шашка-клетка (если она используется в СИМВОЛ), и установку бита соответствия клетки и шашки для проверки победы (не гонять же на каждом ходу цикл проверки).
ПОСЛЕХОД аналогично должен сбросить бит победы для клетки, перекомпилировать таблицы допустимости стрелок и клеток, а так же - "обратных стрелок".

Очевидно, до этого места все имело смысл делать в уме.
Теперь же можно начать писать.
Кстати, можно писать и не на FORTH. Наш F-язык свою функцию уже выполнил.

При написании этого всего на "обычном FORTH", вы кстати обратите внимание, что такое сложное ЗНАЧЕНИЕ породит большое количество переменных, а обилие таблиц, тем более битовых - большое количество стековых перетасовок. Кодовая оптимизация нашей P-машине не повредит.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 11:00 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
Для подобных игр она завсегда одна - http://www.gudleifr.h1.ru/52.html.

А причём тут описание физики лунолёта и в зачем то неудачно созданной дублирующейся теме по ИС Дракон, как форт IDE?
Поболтать о законах правильного проектирования при написании Форт программ? :))
А если программировать по "наитию"?

P.S. Название темы как то необходимо изменить!


Последний раз редактировалось KPG Пн июл 21, 2014 11:05, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 11:05 
KPG писал(а):
А причём тут описание физики лунолёта
А все простые диалоговые программы программы работают одинаково.
KPG писал(а):
в зачем то неудачно созданной дублирующейся теме по ИС Дракон
Что бы показать, что применение Дракона к FORTH здорово обеднит FORTH-программирование. По сути, речь здесь идет о том же: построение программы в рамках какой-то системы, только систему я попытался взять "более подходящую".


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 11:10 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
KPG писал(а):
в зачем то неудачно созданной дублирующейся теме по ИС Дракон
Что бы показать, что применение Дракона к FORTH здорово обеднит FORTH-программирование. По сути, речь здесь идет о том же: построение программы в рамках какой-то системы, только систему я попытался взять "более подходящую".

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

P.S. Ну так и привели бы блок-схему рисунка, раз всё же используете иллюстрирующие диаграммы, а не только текстовый псевдо "Форт" код. :))


Последний раз редактировалось KPG Пн июл 21, 2014 11:20, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 11:17 
KPG писал(а):
школьники на чём то подобном начинают изучать алгоритмику.
Просто у школьников в те времена, когда писались эти учебные программы не было не то, что FORTH, но даже компьютеров... Для них блок-схемы были единственным средством записи алгоритмов. (Если Вы возьмете первый том Кнута и посмотрите про блок-схемы там, то увидите, что это не просто "оформление по ГОСТ").

К тому же, здесь-то Дракон предлагается не школьникам...


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 11:23 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
К тому же, здесь-то Дракон предлагается не школьникам...

Не придумывайте. На это ресурс могут заходить и школьники за интересующей их информацией :shuffle;

P.S. Много школьников, вообще, "управляют" Лого черепашкой.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 11:26 
KPG писал(а):
На это ресурс могут заходить и школьники за интересующей их информацией.
Тогда надо немедленно ту тему снести, чтобы оградить ребят от мракобесия.
Школьнику, чтобы вырасти в программиста надо лишь иметь пятерки по русскому, иностранному и математике.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 11:30 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
KPG писал(а):
На это ресурс могут заходить и школьники за интересующей их информацией.
Тогда надо немедленно ту тему снести, чтобы оградить ребят от мракобесия.

А может сам Форт форум? Тоже же не в "тренде" :))


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Пн июл 21, 2014 13:28 
KPG писал(а):
А может сам Форт форум [снести]?
Заметьте, не я это предложил.

KPG писал(а):
Ну так и привели бы блок-схему рисунка
Приводил неоднократно:
Изображение.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Вт июл 22, 2014 12:20 
KPG писал(а):
А если программировать по "наитию"?
Стоит упомянуть, наверное, о плюсах FORTH-метода. Ведь, от него отказывается даже большинство [структурных] фортеров. Что дает создание P-машины?
Рассмотрим внимательнее внутренности "Лунолета". Они написаны на С, а не на FORTH, но путем создания проблемно-ориентированного языка?
Что я на этом выиграл?
Во-первых, получил более-менее удобный способ собирать модули программы из кубиков, например (Лунолет-3):
Код:
l3()
{
   INPUT
   NOINPUT((dt <= 0), "Слишком малое время реакции")
   NOINPUT((mt < dm), "Нет столько топлива")
   NOINPUT((dm > DMMAX), "Слишком большой расход топлива")
   mt -= dm;
   THRUST
   TIMERUN
   VELOCITY(u, (a * sin(al) - v * u / h))
   r2 = r0 / h;
   VELOCITY(v, (a * cos(al) - r2 * r2 * g + u * u / h))
   DISTANCE(h, v)
   ALTITUDE(r0)
   VELOCITY1
   ALARM((h2 < HNEG), hnegate3)
   STOP((h < HMIN), hzero)
   TIMEOUT
   NOTE("Высота", h2)
   NOTE("1-ая косм.скорость", v1);
   return 0;
}

А, самое главное, интрефейсные куски вообще стали генерироваться автоматически, хватило всего одной главной таблицы (и пары простеньких вспомогательных):
Код:
/* Form-модуль - Расшифровка переменной - Ед.изм. -
   - Использование в моделях - Адрес переменной */
struct {
   char n, *s, *e, *k;
   double *v;
} text[] = {
/* 00 */   'K', "Масса", "кг", "-A", &m,
/* 01 */   'K', "Скорость истечения", "м/c", "-AC", &vt,
/* 02 */   'K', "Емкость топливных баков", "кг", "-AC", &mm,
...
/* 30 */   'I', "Промежуток", "с", "*", &dti,
/* 31 */   'I', "Угол", "град.", "-0B", &ali
};

По ней и дешифрование строки запроса производится, и форма рисуется и, соответственно, новый запрос формируется.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Вт июл 22, 2014 16:43 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
Рассмотрим внимательнее внутренности "Лунолета". Они написаны на С, а не на FORTH, но путем создания проблемно-ориентированного языка?

И в чём проблемно ориентированность?
Подстроится под Си подобный синтаксис или определять формулы в скобочной записи или переменные в Бейсик стиле?
При этом скрыть весь Форт за данным фасадом.
Не ново и делалось на Форте не раз в разных аспектах :shuffle; (один из примеров тема встраивание Си в Форт или трансляция и исполнение Си кода в рамках Форт системы) и существует в разных devel библиотеках трансляторов формул.

gudleifr писал(а):
Что я на этом выиграл?
Во-первых, получил более-менее удобный способ собирать модули программы из кубиков, например (Лунолет-3):.

По мне так особо ничего интересного не произошло и Форт кода внутреннего "ноу-хау" не приведено.

P.S. Особенно если вспомнить тему рефакторинга с непонятными инкремент,декремент (что бросилось в глаза) хотя есть и +! и -! слова и другие моменты "неизящны" в том примере. Sorry Продолжайте тролить. А почему не Phyton?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Вт июл 22, 2014 16:55 
KPG писал(а):
И в чём проблемно ориентированность?
Боюсь, что непонимание Вами этого термина не дает мне возможности ответить на Ваш вопрос.
Разумеется ни о каком С-подобном синтаксисе речь не идет.
KPG писал(а):
Не ново и делалось на Форте не раз в разных аспектах
Пример в студию! (Если конечно Вы не имели в виду писание на FORTH в C-стиле - уж этого-то добра хватает. Только к теме это отношения не имеет).
KPG писал(а):
Форт кода внутреннего "ноу-хау" не приведено
Вы никак не поймете разницу между FORTH-языком и FORTH-методом.
KPG писал(а):
с непонятными инкремент,декремент
Если бы у Вас был опыт программирования, Вы бы понимали значение слова "заплатка". Раз даже Вам "бросилось в глаза", то своей цели я достиг.
Осталось только дождаться от Вас решения поставленной задачи.

P.S.
KPG писал(а):
Sorry Продолжайте тролить.
Ваше поведение, коллега, напоминает мне замечательный пост на одном FORTH-форуме: http://www.balancer.ru/tech/forum/2007/04/t54878--forth-fortress.2981.html.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Вт июл 22, 2014 17:30 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
Осталось только дождаться от Вас решения поставленной задачи.

А кто то или что то Вам Кем то было обещано? :shock:

P.S. Для меня Форт не метод, а Форт система хорошо подходящая для моего понимания программирования, а не для философских рассуждений :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Вт июл 22, 2014 17:35 
KPG писал(а):
А кто то или что то Вам Кем то было обещано?
Ну, как бы, из того, что я разместил пост в разделе задач, следует то, что я жду решения? Или, нет?

KPG писал(а):
Для меня Форт не метод, а Форт система хорошо подходящая для моего понимания программирования
Тогда почему от Вас тут ничего нет "про программирование"?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: ИС Дракон как форт IDE
СообщениеДобавлено: Вт июл 22, 2014 17:41 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 2141
Благодарил (а): 8 раз.
Поблагодарили: 74 раз.
gudleifr писал(а):
KPG писал(а):
А кто то или что то Вам Кем то было обещано?
Ну как бы из того, что я разместил пост в разделе задач поразумевает то, что я жду решения? Или, нет?

Решать/не решать Постить что то /не постить на форуме дело добровольное. И у меня своих забавных задач для решения достаточно.

gudleifr писал(а):
KPG писал(а):
Для меня Форт не метод, а Форт система хорошо подходящая для моего понимания программирования
Тогда почему от Вас тут ничего нет "про программирование"?

ХЗ, наверное то что размещал на форуме из разряда детских шалостей недостойного называться программированием.
Вам видней, коллега. :?

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

А идеологию конструктора программ HiAsm рассматривали в применении "методологии" Форт.
Расскажите им на форуме данной программы-направления в чём они некомпетентны :)


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

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


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

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


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

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