Начальный курс программирования на языке Форт


СРАВНЕНИЕ СТРОК


Для сравнения строк предусмотрены следующие два слова Форта:

-TEXT

( al # a2 -- ?)

Сравнение двух строк длиной # , начинающийся с al и а2. Если сравнение успешное, на стек заносится ложь. Если нет, на стек заносится истина (положительное число, если двоичное представление строки1 > двоичного представления строки2, и отрицательное, если стр.1 < стр.2 ).

-MATCH

( d # s # -- а ?)

Поиск фрагмента длиной #, начинающегося с адреса s (источник) в области памяти длиной # , начинающейся с адреса d (получатель). Если поиск завершился успешно, на стек помещается начало искомого фрагмента a заданной области памяти и ложь. В противном случае неправильный адрес и истина.

С помощью слова -TEXT вы можете либо сравнить две строки, либо проверить порядок их расположения (по алфавиту)1. В гл. 12 приводится пример использования слова

-TEXT для выявления полного совпадения строк.

Так как для быстроты слово -TEXT осуществляет сравнение поячеечно, необходимо следить за тем, чтобы при наличии машин с ячеечной адресацией слову

-TEXT выдавались адреса, выравненные по границе ячейки. Например, если вы хотите сравнить вводимую строку со строкой, находящейся в каком-то массиве, перенесите вводимую строку в рабочую область (посредством -TEXT, а не WORD), поскольку адрес PAD лежит на границе ячейки. Аналогичным образом, когда вам нужно проверить некую строку, находящуюся в блочном буфере, убедитесь в том, что ее адрес выравнен по границе ячейки, или, если вы не можете этого сделать, перед выполнением проверки перешлите строку по выравненному адресу (используя CMOVE).

Отметим, что дефис в слове -TEXT, как и символ «~» кода ASCII, означает логическое «нет». По этой причине указанный префикс удобно применять в именах слов, помещающих в стек флаги с противоположным логическим значением (т.е. нуль представляет истину, а ненулевое значение - ложь).

Если в вашей системе нет слова -TEXT, вы можете загрузить приведенное ниже определение.


Начало  Назад  Вперед