Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср дек 12, 2018 05:27

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - генератор аккумуляторов
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
chess писал(а):
Нужно бы написать слово CREATE-NONAME

Код:
: CREATE-NONAME  \ --> xt
  ALIGN-BYTES @ DUP 4 >
  IF 5 - ALLOT ELSE 1 - ALLOT THEN
  HERE DUP DOES>A !
  ['] _CREATE-CODE COMPILE,
;

: FOO CREATE-NONAME SWAP , DOES> TUCK +! @ ;

STARTLOG
1 FOO ->VECT BAR  2 BAR .   6 BAR  .  CR
5 FOO ->VECT BAR1 4 BAR1 . 10 BAR1 .  CR
8 FOO ->VECT BAR2 6 BAR2 . 11 BAR2 .  CR


ЛОГ
Код:
3 9
9 19
14 25

Ok
Сообщение Добавлено: Пн мар 03, 2008 13:49
  Заголовок сообщения:   Ответить с цитатой
rvm писал(а):
А в какой форме хотелось бы записать решение? (или, другими словами, чего не хватает в стандарте)

Во-первых так чуть покороче будет:
Код:
: foo ( n -- xt )
  HERE  >R ,
  :NONAME R> POSTPONE LITERAL POSTPONE TUCK POSTPONE +! POSTPONE @ POSTPONE ;
;
Нужно бы написать слово CREATE-NONAME
Тогда:
Код:
: foo CREATE-NONAME , DOES> TUCK +! @ ;
Сообщение Добавлено: Чт ноя 22, 2007 18:59
  Заголовок сообщения:   Ответить с цитатой
К заданной вначале формальной постановке — не годиться.
Код:
10 10  5 accgen  TUCK EXECUTE . EXECUTE .
должно дать 15 25.
Сообщение Добавлено: Ср ноя 07, 2007 15:23
  Заголовок сообщения:   Ответить с цитатой
а acc foo ' foo годится?
Сообщение Добавлено: Вт ноя 06, 2007 23:33
  Заголовок сообщения:   Ответить с цитатой
Классический форт заточен на именованные определения, а с анонимными трудней. Да, конечно с TUCK самый короткий вариант, по числу слов соперничает с лиспом :) Но, оно не возвращает xt, что противоречит постановке задачи. В рамках ANS возможен такой вариант
Код:
: accgen ( n -- xt )
  HERE SWAP , >R
  :NONAME R> POSTPONE LITERAL POSTPONE TUCK POSTPONE +! POSTPONE @ POSTPONE ;
;


А в какой форме хотелось бы записать решение? (или, другими словами, чего не хватает в стандарте)
Сообщение Добавлено: Вт ноя 06, 2007 21:17
  Заголовок сообщения:   Ответить с цитатой
: acc create , does> tuck +! @ ;
Сообщение Добавлено: Пн ноя 05, 2007 00:55
  Заголовок сообщения:   Ответить с цитатой
: acc create , does> dup >r +! r> @ ;
Сообщение Добавлено: Пн ноя 05, 2007 00:52
  Заголовок сообщения:   Ответить с цитатой
Код:
: acc create , does> dup >r @ + dup r> ! ;
10 acc foo
Сообщение Добавлено: Вс ноя 04, 2007 22:35
  Заголовок сообщения:  генератор аккумуляторов  Ответить с цитатой
Определить слово foo ( n -- xt ), которое берет n и возвращает xt ( i -- o+i ) слова-аккумулятора. Аккумулятор имеет начальное значение n, увеличивается на поданное значение i и возвращает новое значение.
Код для проверки
Код:
11 foo ->VECT bar1
0  bar1 . \ 11  = 11+0
10 bar1 . \ 21  = 11+10
4  bar1 . \ 25  = 21+4

1 foo ->VECT bar2
0 bar2 . \ 1
2 bar2 . \ 3
5 bar2 . \ 8

5 bar1 . \ 30


Предпочтительны решения без EVALUATE
Примеры на других языках: paulgraham accgen.html
Сообщение Добавлено: Вс ноя 04, 2007 18:16

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


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