Forth
http://www.fforum.winglion.ru/

Список актуальных задач из Rosetta code
http://www.fforum.winglion.ru/viewtopic.php?f=2&t=3263
Страница 3 из 5

Автор:  f02732 [ Пт фев 14, 2020 01:26 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

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 * ,

Автор:  Hishnik [ Пт фев 14, 2020 02:39 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

f02732 писал(а):
Даже если я в gforth добавлю LIT, то работать всё равно не будет, в нём : хранит на стеке служебные данные.

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

Автор:  f02732 [ Пт фев 14, 2020 03:07 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

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.

Автор:  Hishnik [ Пт фев 14, 2020 03:20 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

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, совмещенный со стеком данных, в некоторых случаях мешает, проще отделить его от стека данных, записав конкретные примеры кода, которые при таком решении становятся рабочими.

Автор:  Victor__v [ Пт фев 14, 2020 11:01 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

Hishnik писал(а):
Опять же, это лишний раз подтверждает, что ANS-Forth - умозрительная вещь...

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

Автор:  Victor__v [ Пт фев 14, 2020 11:07 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

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

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

Автор:  f02732 [ Пт фев 14, 2020 11:57 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

Нет, не прокатит.

Автор:  Victor__v [ Пт фев 14, 2020 12:08 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

f02732 писал(а):
Нет, не прокатит.

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

Автор:  f02732 [ Пт фев 14, 2020 12:15 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

Victor__v писал(а):
f02732 писал(а):
Нет, не прокатит.

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

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

Автор:  Victor__v [ Пт фев 14, 2020 12:25 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

А предназначение LITERAL как раз в компиляции чего-то там в словах.
Что-то в G перемудрили

Автор:  Hishnik [ Пт фев 14, 2020 13:06 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

Victor__v писал(а):
: FACT CELLS [ LIT, ] + @ ;

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

Автор:  Hishnik [ Сб фев 15, 2020 04:18 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

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 Кб | Просмотров: 15219 ]

Автор:  mOleg [ Вс фев 16, 2020 17:05 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

А чем раздел Конкурс решения задач не угодил?

Автор:  Hishnik [ Вс фев 16, 2020 17:11 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

mOleg писал(а):
А чем раздел Конкурс решения задач не угодил?

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

Автор:  Hishnik [ Вт фев 18, 2020 02:22 ]
Заголовок сообщения:  Re: Список актуальных задач из Rosetta code

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 Кб | Просмотров: 15084 ]

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