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

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

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

Victor__v писал(а):
А можно проще, без закидонов.

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

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

Задача: вычислить N-е число Фиббоначи
Тип задачи: базовые операции, циклы
Решение:
Код:
: fib ( n -- fib )  0 1 rot 0 ?do  over + swap  loop drop ;
( Использование ) 10 fib .

Страница задачи: http://rosettacode.org/wiki/Fibonacci_sequence

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

Кажется, кто-то просил факториал :)
Пойдёт только на нативных системах
Цитата:
: 0->N 0 2>R BEGIN 2R@ XOR WHILE R@ RP@ 2 CELLS + @ EXECUTE RP@ 1+! REPEAT RDROP RDROP RDROP ; \ n -- iter: 0|1|2|....n-1
: FACT 1 SWAP 0->N 1+ * ; \ n -- n!

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

Код:
0 TEXTEDIT.SHOW
0 100 800 300 0 TEXTEDIT.RECT

: PRINT
  0 TEXTEDIT.APPENDLINE
;

CREATE $BUF 256 ALLOT

: .
0 $BUF 32 FILL
$BUF >STR
$BUF PRINT
;

: RUN
  2 99 DO
    I . " bottles of beer on the wall" PRINT
    I . " bottles of beer" PRINT
    " Take one down and pass it around" PRINT
  -1 +LOOP

    " 1 bottle of beer on the wall" PRINT
    " 1 bottle of beer" PRINT
    " Take one down and pass it around" PRINT
    " No more bottles of beer on the wall, no more bottles of beer." PRINT
    " Go to the store and buy some more, 99 bottles of beer on the wall." PRINT
;

RUN


P.S. По итогам теста поправлен +LOOP, который не захватывал последнюю итерацию, если шаг цикла был отрицательным.

Вложения:
rosetta_99_bottles.png
rosetta_99_bottles.png [ 14.04 Кб | Просмотров: 13595 ]

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

Факториал, с учетом особенностей Форта:

Код:
: FACT
  1 + 1 DO I LOOP
  BEGIN
    *
  DEPTH 2 < UNTIL
;

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

Hishnik писал(а):
Факториал, с учетом особенностей Форта:

Код:
: FACT
  1 + 1 DO I LOOP
  BEGIN
    *
  DEPTH 2 < UNTIL
;

Лишнее - каждый раз в цикле проверять глубину стека.

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

KPG писал(а):
Лишнее - каждый раз в цикле проверять глубину стека.

Вот глубину на входе забыл запомнить. А в цикле не лишнее - это же два разных цикла. Сначала кладем на стек все числа от 1 до N, а потом перемножаем, пока есть что перемножать. Это просто ради демонстрации использования DEPTH. А вообще факториал считать не надо, его надо таблицей один раз задать.

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

Hishnik писал(а):
его надо таблицей один раз задать.

Ни слова больше :D
Код:
HERE
1 ,
1 ,
2 ,
2 3 * ,
2 3 4 * * ,
2 3 4 5 * * * ,
2 3 4 5 6 * * * * ,
2 3 4 5 6 7 * * * * * ,
2 3 4 5 6 7 8 * * * * * * ,
2 3 4 5 6 7 8 9 * * * * * * * ,
2 3 4 5 6 7 8 9 10 * * * * * * * * ,
2 3 4 5 6 7 8 9 10 11 * * * * * * * * * ,
2 3 4 5 6 7 8 9 10 11 12 * * * * * * * * * * ,

: FACT CELLS [ LIT, ] + @ ;


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

Victor__v писал(а):
Ни слова больше

Ну, собственно, да, если из практических соображений :D Просто там в описании задачи указано "циклы", то есть смысл в том, чтобы на этом примере показать, как язык обойдется с такой задачей, используя циклы. Я вот не захотел показывать рекурсию..

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

: fact 1+ 1 tuck do i * loop ;

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

Victor__v писал(а):
Hishnik писал(а):
его надо таблицей один раз задать.

Ни слова больше :D

:) Какая связь между словами HERE и FACT в приведённом коде?

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

Эзотерическая :))
Не, ну KPG, Вы же опытный товарищ, разберётесь

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

Задача отображения календаря
не реализована на Форт.

P.S. Кто и как бы её стал реализовывать на Форт?

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

Victor__v писал(а):
Эзотерическая :))
Не, ну KPG, Вы же опытный товарищ, разберётесь

В том то и дело, что эзотерическая:)
Что значит LIT,? Нет, я то знаю, но вот например gforth — нет. Ещё и не учтитывается, что : может оставить на стеке служебные данные.

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

f02732 писал(а):
Что значит LIT,? Нет, я то знаю, но вот например gforth — нет. Ещё и не учтитывается, что : может оставить на стеке служебные данные.

Но красиво же. И LIT, несложно сделать, и служебные данные никакие в целом-то не нужны.

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