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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 01:26 
Не в сети

Зарегистрирован: Пн июл 01, 2019 14:01
Сообщения: 69
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Hishnik писал(а):
Но красиво же. И LIT, несложно сделать, и служебные данные никакие в целом-то не нужны.

Не очень красиво, когда в одной системе код работает, а другой -нет. Даже если я в gforth добавлю LIT, то работать всё равно не будет, в нём : хранит на стеке служебные данные.

Вдобавок можно сделать и красивее, создать определяющее слово для таких табличных функций:
Код:
: table:  ( "name" -- )
    CREATE
    DOES>  SWAP CELLS + @ ;

table: fact
    1 ,
    1 ,
    2 DUP ,
    3 * DUP ,
    4 * DUP ,
    5 * DUP ,
    6 * DUP ,
    7 * DUP ,
    8 * DUP ,
    9 * DUP ,
    10 * DUP ,
    11 * DUP ,
    12 * ,


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 02:39 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
f02732 писал(а):
Даже если я в gforth добавлю LIT, то работать всё равно не будет, в нём : хранит на стеке служебные данные.

Это скорее минус gforth. Из стековой нотации : ничего такого не следует, в голове это держать неудобно. Как раз хороший пример того, как реальный код может скорректировать требования к форт-системе.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 03:07 
Не в сети

Зарегистрирован: Пн июл 01, 2019 14:01
Сообщения: 69
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Hishnik писал(а):
f02732 писал(а):
Даже если я в gforth добавлю LIT, то работать всё равно не будет, в нём : хранит на стеке служебные данные.

Это скорее минус gforth. Из стековой нотации : ничего такого не следует, в голове это держать неудобно. Как раз хороший пример того, как реальный код может скорректировать требования к форт-системе.

6.1.0450 : “colon” CORE
( C: “<spaces>name” -- colon-sys )
Skip leading space delimiters. Parse name delimited by a space. Create a definition for name, called a “colon definition”. Enter compilation state and start the current definition, producing colon-sys. Append the initiation semantics given below to the current definition.

3.2.3.2 Control-flow stack
The control-flow stack is a last-in, first out list whose elements define the permissible matchings of control-flow words and the restrictions imposed on data-stack usage during the compilation of control structures. The elements of the control-flow stack are system-compilation data types. The control-flow stack may, but need not, physically exist in an implementation. If it does exist, it may be, but need not be, implemented using the data stack. The format of the control-flow stack is implementation defined. Since the control-flow stack may be implemented using the data stack, items placed on the data stack are unavailable to a program after items are placed on the control-flow stack and remain unavailable until the control-flow stack items are removed.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 03:20 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
f02732 писал(а):
The control-flow stack may, but need not, physically exist in an implementation. If it does exist, it may be, but need not be, implemented using the data stack.

Опять же, это лишний раз подтверждает, что ANS-Forth - умозрительная вещь, в основном оторванная от реальности, а следование этому стандарту заставляет отказываться от каких-то полезных практических приемов в угоду демонстрации подчиненности псевдо-элите Форта. Конкретно в этом случае выход вообще простой - раз control-flow stack, совмещенный со стеком данных, в некоторых случаях мешает, проще отделить его от стека данных, записав конкретные примеры кода, которые при таком решении становятся рабочими.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 11:01 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Hishnik писал(а):
Опять же, это лишний раз подтверждает, что ANS-Forth - умозрительная вещь...

И понеслась.... :))
А я всего-то хотел обойтись без явного использования таблицы

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 11:07 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
f02732 писал(а):
Не очень красиво, когда в одной системе код работает, а другой -нет. Даже если я в gforth добавлю LIT, то работать всё равно не будет, в нём : хранит на стеке служебные данные.

Заменить тогда фрагмент [ LIT, ] на LITERAL
Уж это gforth должен схавать

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 11:57 
Не в сети

Зарегистрирован: Пн июл 01, 2019 14:01
Сообщения: 69
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Нет, не прокатит.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 12:08 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
f02732 писал(а):
Нет, не прокатит.

А нафига там вообще слово LITERAL используется, если не для компиляции чисел из входного потока?

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 12:15 
Не в сети

Зарегистрирован: Пн июл 01, 2019 14:01
Сообщения: 69
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Victor__v писал(а):
f02732 писал(а):
Нет, не прокатит.

А нафига там вообще слово LITERAL используется, если не для компиляции чисел из входного потока?

Да не об этом речь же, в gforth : оставляет на стеке свои служебные данные.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 12:25 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1287
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
А предназначение LITERAL как раз в компиляции чего-то там в словах.
Что-то в G перемудрили

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Пт фев 14, 2020 13:06 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Victor__v писал(а):
: FACT CELLS [ LIT, ] + @ ;

Вобщем, я у себя уже запустил :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Сб фев 15, 2020 04:18 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
http://www.rosettacode.org/wiki/Draw_a_pixel

Код:
0 50 320 240 0 IMAGE.RECT
0 IMAGE.CLS
100 100 0xFF0000 0 IMAGE.SETPIXEL
0 IMAGE.SHOW


Вложения:
rosetta_drawpixel.png
rosetta_drawpixel.png [ 3.5 Кб | Просмотров: 15202 ]
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Вс фев 16, 2020 17:05 
Не в сети
Moderator
Moderator
Аватара пользователя

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

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Вс фев 16, 2020 17:11 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
mOleg писал(а):
А чем раздел Конкурс решения задач не угодил?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Список актуальных задач из Rosetta code
СообщениеДобавлено: Вт фев 18, 2020 02:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
http://www.rosettacode.org/wiki/A%2BB

Task
Given two integers, A and B.

Their sum needs to be calculated.


Код:
0 LABEL.SHOW
20 20 50 20 0 LABEL.RECT
" A" 0 LABEL.TEXT

1 LABEL.SHOW
80 20 50 20 1 LABEL.RECT
" B" 1 LABEL.TEXT

2 LABEL.SHOW
200 40 100 25 2 LABEL.RECT

0 TEXTEDIT.SHOW
0 40 50 25 0 TEXTEDIT.RECT

1 TEXTEDIT.SHOW
60 40 50 25 1 TEXTEDIT.RECT

0 BUTTON.SHOW
120 40 50 25 0 BUTTON.RECT
" A+B" 0 BUTTON.TEXT

VARIABLE FLAG
CREATE $BUF 256 ALLOT

: GETA
  FLAG OFF
  FLAG SETFLAG $BUF 0 0 TEXTEDIT.GETLINE BEGIN FLAG @ UNTIL
  $BUF STR>
;

: GETB
  FLAG OFF
  FLAG SETFLAG $BUF 0 1 TEXTEDIT.GETLINE BEGIN FLAG @ UNTIL
  $BUF STR>
;

: SHOWRESULT
  $BUF >STR
  $BUF 2 LABEL.TEXT
;

" GETA GETB + SHOWRESULT" 0 BUTTON.ACTION



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

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


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

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


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

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