Gforth, FORGET и LIST слова, как в оригинальном Forth

Есть ли эквивалент forget слову Forth в Gforth?

Я видел про marker, но у него другое поведение. Кроме того, команда list, похоже, не дает листинга программы.

Я хотел бы просмотреть список программ в памяти, таких как старый list в BASIC - я думаю, что это было поведение и в оригинальном Forth.


person Krackout    schedule 24.06.2020    source источник
comment
По-видимому, list в исходном списке дисковых блоков Форта, а не в программе памяти. Тем не менее, если кто-нибудь знает что-то эквивалентное списку BASIC, это было бы полезно.   -  person Krackout    schedule 25.06.2020
comment
Пожалуйста, рассмотрите возможность принятия ответа, если какой-либо из ответов разрешил ваш вопрос.   -  person mihai    schedule 22.07.2020
comment
В настоящее время ни один ответ полностью не решает мой вопрос. Тем не менее, я отметил как полезные те, которые помогли мне.   -  person Krackout    schedule 22.07.2020


Ответы (3)


Я не знаю Gforth, но FORGET на основе старого листинга FIG Forth показан ниже. Он очень чувствителен к структуре словаря и организации словаря. Такие слова, как nfa (адрес поля имени) и lfa (адрес поля ссылки), имеют более современные эквиваленты. Это вышло из строя (VFX) Forth, когда я его запускал, но это может указать кому-то правильное направление.

variable FENCE

\ Per fig forth listing ( slightly modernised )
: forget  \ "word-to-forget-from"
  CURRENT @ CONTEXT @ - ABORT" Vocabulary error."
  ' DUP FENCE @ < ABORT" Word below FENCE."
  DUP NFA DP ! LFA @ CURRENT ! ;

DP @ FENCE !

\ What was tested.  WARNING crashed Forth!!
\ My guess is that CURRENT needs to be set to a different address
: forget  \ "word-to-forget-from"
  CURRENT @ CONTEXT @ - ABORT" Vocabulary error."
  ' DUP FENCE @ < ABORT" Word below FENCE."
  >LINK DUP DP !  \ Set the top of the dictionary
  @ CURRENT ! ;   \ Point current to the last valid definition

Могут быть способы использовать реализацию маркера. Он должен хранить указатель восстановления, который может быть доступен для сброса на соответствующий адрес некоторого определения.

person Tls Chris    schedule 26.06.2020

FORGET устарел и включен как уступка существующим реализациям в соответствии со стандартом Forth, и слово, которое вам нужно для перечисления слова Forth, это SEE ‹word›.

Это слово устарело и включено как уступка существующим реализациям.

forth-standard.org/standard/tools/FORGET

person Glassman2004    schedule 09.07.2020
comment
устаревшее вместо устаревшее. У вас есть источник для этого? - person mihai; 21.07.2020
comment
см.: forth-standard.org/standard/tools/FORGET Это слово устарело и включен как уступка существующим реализациям. другими словами, он все еще используется, но скоро исчезнет. - person Glassman2004; 22.07.2020
comment
Большой! Я добавил ссылку и цитату к вашему ответу! - person mihai; 23.07.2020

Мне кажется, что MARKER делает то же самое, что и FORGET. Разница лишь в том, что вам нужно настроить его заранее. Я могу подтвердить, что поведение соответствует указанному в Начало Forth [ 1] с Gforth 0.7.3. Вот выдержка:

Слово FORGET ищет заданное слово в словаре и фактически удаляет его из словаря вместе со всем, что вы могли определить после этого слова. ЗАБУДЬТЕ, как интерпретатор, ищет, начиная с конца; он удаляет только самые последние определенные версии слова (вместе со всеми последующими словами). Так что теперь, когда вы набираете GREET на терминале, интерпретатор находит оригинальный GREET.

ЗАБУДЬТЕ — хорошее слово, которое нужно знать; он помогает вам очистить ваш словарь, чтобы он не переполнялся. (Словарь занимает место в памяти, поэтому, как и при любом другом использовании памяти, вы хотите ее сохранить.)

Некоторые Форты не имеют FORGET. В этом случае вам нужно заранее спланировать забывание, например:

МАРКЕР - работа

определяет нулевое определение - работа, чтобы отметить текущее состояние системы для вас. Когда вы выполняете -work в более позднее время, состояние системы восстанавливается до состояния, которое было на момент определения -work. В частности, все слова, определенные после слова-маркера -work, полностью удаляются из словаря.

[1] https://www.forth.com/starting-forth/3-forth-editor-blocks-buffer/

person mihai    schedule 21.07.2020