Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''(FIND)''' — архаичное слово [[Каллисто]]. | | '''(FIND)''' — стандартное слово [[Каллисто]]. |
| (FIND) ( a1 a2 −− a3 c 1 | 0 ) Поиск слова a1 в словаре a2. Если найдено, | | (FIND) ( a1 a2 −− a3 c 1 | 0 ) Поиск слова a1 в словаре a2. Если найдено, вернуть nfa и байт счётчика. |
| вернуть nfa и байт счётчика.
| |
| Искать слово a1 в наборе слов a2. При успехе дать [[NFA]] его статьи и c - байт длины с флагами. | | Искать слово a1 в наборе слов a2. При успехе дать [[NFA]] его статьи и c - байт длины с флагами. |
|
| |
|
| == Ввод слова (FIND) == | | == Ввод слова (FIND) == |
| В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши {{ШГ→}} [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша П|{{Чёрная клавиша|П}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша P|{{Синяя клавиша|P}}]] {{ШГ←}} | | В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши [[Клавиша ШГ вправо|{{Чёрная клавиша|ШГ→}}]] [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша П|{{Чёрная клавиша|П}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] |
|
| |
|
| == (FIND) в fig-FORTH Release 1 glossary, май 1979 (англ.) == | | == (FIND) в fig-FORTH Release 1 glossary, май 1979 (англ.) == |
Строка 16: |
Строка 15: |
|
| |
|
| == Реализация == | | == Реализация == |
| В [[Каллисто|Каллисто 1.0]] примитив (FIND) сперва ищет слово в [[Память двоичных данных|памяти данных]], а затем в [[Память программ|памяти программ]]:
| |
| <pre>
| |
| 739 ;#xFIND
| |
| 740 ; (FIND) ( a1 a2 −− a3 c 1 | 0 ) Поиск слова a1 в словаре a2. Если найдено, вернуть nfa и байт счётчика.
| |
| 741 ; Адрес_строки NFA => NFA длина TRUE/FALSE
| |
| 742 ; В отличии от Форта ИТЭФ мы возвращаем NFA
| |
| 743 ; a1 адрес строки со счётчиком −− слово, которое мы ищем (пока только в байтовой области)
| |
| 744 ; a2 NFA первого слова в начале списка слов, где мы ищем
| |
| 745 ; a3 NFA найденного слова в списке
| |
| 746 ; c байт длины и флагов найденого в списке слова
| |
| 747 ; Сделать поиск и сравнение по словам
| |
| 748 ;
| |
| 749 ; Здесь в качестве истины возвращается 1, хотя Каллисто перешло на стандарт −1/0
| |
| 750 LPFIND: .DB 6
| |
| 751 .TEXT "(FIND)" ; ( a1 a2 −− a3 c 1 | 0 )
| |
| 752 .DW LBRAN
| |
| 753 PFIND: .DW JPFIND
| |
| 754 JPFIND:
| |
| 755 ; Сперва поиск в памяти данных
| |
| 756 RM3 MA 1 + M3
| |
| 757 PKRM03 1 EE 4 − MB ; RB адрес слова, которое мы ищем (строка со счётчиком)
| |
| 758 KRMB M0 ; R0 Длина слова, которое мы ищем
| |
| 759 RMB 1 + MB ; RB адрес первой литеры слова, который мы ищем
| |
| 760 KRMA
| |
| 761 DFAST: M5 1 EE 4 − FX>=0 PFIND2
| |
| 762 MA M5 ; RA=M5 адрес NFA слова в списке слов, с которым сравниваем
| |
| 763 KRMA PKM03 63 KAND ; TOS байт длины и флагов очередного слова из списка
| |
| 764 RM0 − FX=0 DSKIP ; Если длины и флаг SMUDGE различны, пропустить слово
| |
| 765 KRM5 KRMB − FX!=0 SLO ; Если ещё и первые литеры равны, сравнить слова подробней
| |
| 766 DSKIP: PKRM03 31 KAND RMA + M5
| |
| 767 KRM5 RME ∗ KRM5 + FX=0 DFAST ; LFA, Смотреть след. слово
| |
| 768 PKM03 KGOTO9 ; Не нашли, в RX уже 0
| |
| 769 SLO: RM0 M1 RMB M5 RMA 1 + M4 GOTO SLOIN
| |
| 770 SLOL: KRM4 KRM5 − FX=0 DSKIP
| |
| 771 SLOIN: FL1 SLOL
| |
| 772 PKRM03 RMA 1 EE 4 +
| |
| 773 PGOTO PFTAIL ; NFA, нашли!
| |
| 774
| |
| 775 ; Если слово не найдено, поиск в памяти программ
| |
| 776 PFIND2: RM5
| |
| 777 FAST: MA ; RA адрес NFA слова в списке слов, с которым сравниваем
| |
| 778 KPRGM PKM03 63 KAND ; TOS байт длины и флагов очередного слова из списка
| |
| 779 RM0 − FX=0 SKIP ; Если длины и флаг SMUDGE различны, пропустить слово
| |
| 780 RMA 1 + KPRGM KRMB − PX!=0 SLOW ; Если ещё и первые литеры равны, сравнить слова подробней
| |
| 781 SKIP: PKRM03 31 KAND 1 + RMA +
| |
| 782 KPRGM FANS 1 + KPRGM
| |
| 783 <−> RME ∗ + PX=0 FAST ; LFA, Смотреть след. слово
| |
| 784 PKM03 KGOTO9 ; Не нашли, в RX уже 0
| |
| 785 SLOW: RM0 M1 RMB M5 RMA 1 + GOTO SLOWIN
| |
| 786 SLOWL: 1 + M8 ; R8 следующая литера
| |
| 787 KPRGM KRM5 − PX=0 SKIP
| |
| 788 RM8
| |
| 789 SLOWIN: FL1 SLOWL
| |
| 790 PKRM03 RMA
| |
| 791 PFTAIL: PKM03 ; NFA, нашли!
| |
| 792 <−> KM3 ; c
| |
| 793 1 KM3 KGOTO9 ; 1
| |
| </pre>
| |
| === Советская реализация ===
| |
| Слово (FIND) в ФОРТ-ЕС было [[примитив]]ом и устроено сложнее, чем в [[Каллисто]] и fig-Форте. Вот его описание и определение: | | Слово (FIND) в ФОРТ-ЕС было [[примитив]]ом и устроено сложнее, чем в [[Каллисто]] и fig-Форте. Вот его описание и определение: |
| <PRE> | | <PRE> |
Строка 158: |
Строка 98: |
| == Ссылки == | | == Ссылки == |
| * {{Исходник|xFIND|(FIND)}} | | * {{Исходник|xFIND|(FIND)}} |
| * См. также слово [[FINDN]]
| |
|
| |
|
|
| |
|
Строка 165: |
Строка 104: |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]] | | [[Категория:Примитивы]] |
| [[Категория:Управление поиском слов]] | | [[Категория:Управление поиском слов Каллисто]] |