Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''<''' (меньше) — стандартное слово [[Каллисто]]. | | '''<''' — стандартное слово [[Каллисто]]. |
| < ( y x −− f ) Меньше. f равно −1 если и только если y меньше, чем x.
| |
| == Ввод слова < ==
| |
| В [[Режим NUM|режиме NUM]] последовательно нажмите две клавиши [[Клавиша F|{{Оранжевая клавиша|F}}]] {{ШГ→}}
| |
| | |
| == < и F< в стандарте ANS Forth ==
| |
| <PRE>
| |
| 6.1.0480 < "less-than" CORE
| |
| ( n1 n2 -- flag )
| |
| flag - true, если и только если n1 - меньше чем n2.
| |
| | |
| См.: 6.1.2340 U<.
| |
| | |
| 12.6.1.1460 F< "f-less-than" FLOATING
| |
| ( -- flag ) ( F: r1 r2 -- ) or ( r1 r2 -- flag )
| |
| flag - true, если и только если r1 - меньше чем r2.
| |
| </PRE>
| |
| | |
| == История ==
| |
| Слово < является одним из самых древних в Форте.
| |
| | |
| Оно появилось в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году ([https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F_SLAC Национальная ускорительная лаборатория SLAC], [https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%8D%D0%BD%D1%84%D0%BE%D1%80%D0%B4%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82 Стэнфордский университет]).
| |
| | |
| Вместе со словом < появилось соглашение оставлять значение истинности на стеке. Сперва это было 1 для «истина» и 0 для «ложь».
| |
| | |
| === < в предыдущем стандарте Forth-83 (англ.) ===
| |
| < n1 n2 -- flag 83 "less-than"
| |
| flag is true if n1 is less than n2.
| |
| -32678 32767 < must return true.
| |
| -32768 0 < must return true.
| |
| | |
| === < в стандарте Forth-79 (англ.) ===
| |
| <PRE>
| |
| < n1 n2 -- flag 139 "less-than"
| |
| True if n1 is less than n2.
| |
| | |
| -32768 32767 < must return true.
| |
| -32768 0 < must be distinguished.
| |
| </PRE>
| |
| | |
| === < в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
| |
| < n1 n2 --- f L0
| |
| Leave a true flag if n1 is less than n2; otherwise leave a false
| |
| flag.
| |
| | |
| == Реализация ==
| |
| В [[Каллисто|Каллисто 1.0]] [[примитив]] < вычитает два числа на вершине стека и сравнивает результат с нулём:
| |
| <pre>
| |
| 886 STT: 1 +/− PKM03 KGOTO9 ; [SP] := −1; NEXT
| |
| …
| |
| 910 ;#Less
| |
| 911 ; < ( y x −− f ) Меньше. f равно −1 если и только если y меньше, чем x.
| |
| 912 LLESS: .DB 1
| |
| 913 .TEXT "<" ; ( a b −− флаг )
| |
| 914 .DW LEQUAL
| |
| 915 LESS: .DW JLESS
| |
| 916 JLESS: RM3 M8 1 + M3
| |
| 917 PKRM03 KRM8 − FX>=0 STT
| |
| 918 Cx PKM03 KGOTO9
| |
| </pre>
| |
| Реализации из SP-Forth 4.20:
| |
| <pre>
| |
| CODE < ( n1 n2 -- flag ) \ 94
| |
| \ flag "истина" тогда и только тогда, когда n1 меньше n2.
| |
| CMP EAX, [EBP]
| |
| SETLE AL
| |
| AND EAX, # 1
| |
| A; 0x48 C, \ DEC EAX
| |
| LEA EBP, 4 [EBP]
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
| <pre>
| |
| CODE F< \ *
| |
| LEA EBP, -4 [EBP]
| |
| MOV [EBP], EAX
| |
| XOR EBX, EBX
| |
| FCOMPP
| |
| FSTSW EAX
| |
| SAHF
| |
| JBE SHORT @@1
| |
| MOV EBX, # -1
| |
| @@1: MOV EAX, EBX
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
| | |
| === Советская реализация ===
| |
| У Баранова-Ноздрунова приводится следующее описание слова < (стр. 26):
| |
| : < ( A,B ---> A < B ) - 0< ;
| |
| | |
| Описание и определение слова < в ядре ФОРТ-ЕС:
| |
| <PRE>
| |
| < N1,N2->F F НЕ НУЛЬ, ЕСЛИ N1 МЕНЬШЕ N2 49
| |
| | |
| Экран номер 19
| |
| ( 31.03.86 CPАBHEHИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ)
| |
| | |
| : < ( N1,N2->F) - 0< ;
| |
| </PRE>
| |
| | |
| В FORTH ИТЭФ слово < тоже было [[примитив]]ом, вот его определение:
| |
| <PRE>
| |
| HEAD 201Q,,274Q,LESS ; <
| |
| POP AX
| |
| POP CX
| |
| CMP AX, CX
| |
| JG TRUE
| |
| JMP FALSE
| |
| ...
| |
| | |
| FALSE: SUB AX, AX
| |
| PUT: PUSH AX
| |
| NEXT
| |
| TRUE: MOV AX, 1
| |
| JMP PUT
| |
| </PRE>
| |
| | |
| === colorForth (cf2019.nasm 2019 Sep 14) ===
| |
| <PRE>
| |
| less:
| |
| cmp [ esi ], _TOS_
| |
| js .forward
| |
| xor ecx, ecx
| |
| .forward:
| |
| ret
| |
| </PRE>
| |
| | |
| == Ссылки ==
| |
| * {{Исходник|Less|<}}
| |
| * См. слова [[0⟨|0<]], [[Слово =|=]] и [[⟩|>]]
| |
| * См. также [[Символ с кодом 60|символ <]]
| |
| * Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0480 < (less-than)] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1460 F< (f-less-than)] в стандарте ANS Forth ''(англ.)''
| |
| * Слова [http://forth-standard.org/standard/core/less < (less-than)] и [http://forth-standard.org/standard/float/Fless F< (f-less-than)] в черновике Forth 200x ''(англ.)''
| |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\04.%20KOMPJUTER%20%22PRINIMAET%20RESENIA%22 КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ"] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
| |
| * [http://www.forth.com/starting-forth/sf4/sf4.html Decisions, Decisions…] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
| |
| | |
|
| |
|
| {{нет иллюстраций}} | | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |
| [[Категория:Операции сравнения Каллисто]] | | [[Категория:Операции сравнения Каллисто]] |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |