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 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, который не захватывал последнюю итерацию, если шаг цикла был отрицательным.
|
Автор: | 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 писал(а): его надо таблицей один раз задать. Ни слова больше Код: 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 писал(а): Ни слова больше Ну, собственно, да, если из практических соображений Просто там в описании задачи указано "циклы", то есть смысл в том, чтобы на этом примере показать, как язык обойдется с такой задачей, используя циклы. Я вот не захотел показывать рекурсию.. |
Автор: | 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 писал(а): его надо таблицей один раз задать. Ни слова больше Какая связь между словами 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/ |