Редактирование:

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''<''' (меньше) — стандартное слово [[Каллисто]].
'''<''' (меньше) — стандартное слово [[Каллисто]].
<              ( y x −− f )                        Меньше. f равно −1 если и только если y меньше, чем x.
 
== Ввод слова &lt; ==
== Ввод слова &lt; ==
В [[Режим NUM|режиме NUM]] последовательно нажмите две клавиши [[Клавиша F|{{Оранжевая клавиша|F}}]] {{ШГ→}}
В [[Режим NUM|режиме NUM]] последовательно нажмите две клавиши [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ШГ вправо|{{Чёрная клавиша|ШГ→}}]]


== &lt; и F&lt; в стандарте ANS Forth ==
== &lt; в стандарте ANS Forth ==
<PRE>
  6.1.0480  <                                "less-than"                  CORE
  6.1.0480  <                                "less-than"                  CORE
             ( n1 n2 -- flag )
             ( n1 n2 -- flag )
Строка 12: Строка 11:
         См.: 6.1.2340 U<.
         См.: 6.1.2340 U<.


== F&lt; в стандарте ANS Forth ==
  12.6.1.1460  F<                        "f-less-than"                FLOATING
  12.6.1.1460  F<                        "f-less-than"                FLOATING
             ( -- flag ) ( F: r1 r2 -- ) or ( r1 r2 -- flag )
             ( -- flag ) ( F: r1 r2 -- ) or ( r1 r2 -- flag )
             flag - true, если и только если r1 - меньше чем r2.
             flag - true, если и только если r1 - меньше чем r2.
</PRE>
== История ==
Слово &lt; является одним из самых древних в Форте.
Оно появилось в программе 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 Стэнфордский университет]).
Вместе со словом &lt; появилось соглашение оставлять значение истинности на стеке. Сперва это было 1 для «истина» и 0 для «ложь».


=== &lt; в предыдущем стандарте Forth-83 (англ.) ===
== &lt; в предыдущем стандарте Forth-83 (англ.) ==
       <            n1 n2 -- flag                83        "less-than"
       <            n1 n2 -- flag                83        "less-than"
           flag is true if n1 is less than n2.
           flag is true if n1 is less than n2.
Строка 30: Строка 22:
                   -32768 0 < must return true.
                   -32768 0 < must return true.


=== &lt; в стандарте Forth-79 (англ.) ===
== &lt; в стандарте Forth-79 (англ.) ==
<PRE>
  <              n1 n2 -- flag                139        "less-than"
  <              n1 n2 -- flag                139        "less-than"
     True if n1 is less than n2.
     True if n1 is less than n2.
Строка 37: Строка 28:
     -32768 32767 <  must return true.
     -32768 32767 <  must return true.
     -32768 0 <  must be distinguished.
     -32768 0 <  must be distinguished.
</PRE>


=== &lt; в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== &lt; в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  <            n1  n2  ---  f                  L0
  <            n1  n2  ---  f                  L0
         Leave a true flag if n1 is less than n2; otherwise leave a false
         Leave a true flag if n1 is less than n2; otherwise leave a false
         flag.
         flag.


== Реализация ==
== История ==
В [[Каллисто|Каллисто 1.0]] [[примитив]] &lt; вычитает два числа на вершине стека и сравнивает результат с нулём:
Слово &lt; является одним из самых древних в Форте.
<pre>
 
886 STT:           1 +/− PKM03  KGOTO9            ; [SP] := −1; NEXT
Оно появилось в программе 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 Стэнфордский университет]).
 
910 ;#Less
Вместе со словом &lt; появилось соглашение оставлять значение истинности на стеке, 1 для «истина» и 0 для «ложь».
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>


=== Советская реализация ===
== Реализация &lt; ==
У Баранова-Ноздрунова приводится следующее описание слова &lt; (стр. 26):
У Баранова-Ноздрунова приводится следующее описание слова &lt; (стр. 26):
   : <  ( A,B ---> A < B )    - 0< ;
   : <  ( A,B ---> A < B )    - 0< ;


Описание и определение слова &lt; в ядре ФОРТ-ЕС:
Определение слова &lt; в ядре ФОРТ-ЕС:
<PRE>
<PRE>
  <          N1,N2->F                      F НЕ НУЛЬ, ЕСЛИ N1 МЕНЬШЕ N2  49
                     Экран номер 19
                     Экран номер 19
( 31.03.86  CPАBHEHИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ)
( 31.03.86  CPАBHEHИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ)


: <  ( N1,N2->F)    - 0< ;
: <  ( N1,N2->F)    - 0< ;
</PRE>
В FORTH ИТЭФ слово &lt; тоже было [[примитив]]ом, вот его определение:
<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>
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|Less|&lt;}}
* См. слова [[0⟨|0&lt;]], [[Слово =|=]] и [[Слово ⟩|&gt;]]
* См. слова [[0⟨|0&lt;]], [[Слово =|=]] и [[⟩|&gt;]]
* См. также [[Символ с кодом 60|символ &lt;]]
* См. также [[Символ с кодом 60|символ &lt;]]
* Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0480 &lt; (less-than)] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1460 F&lt; (f-less-than)] в стандарте ANS Forth ''(англ.)''
* Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0480 &lt; (less-than)] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1460 F&lt; (f-less-than)] в стандарте ANS Forth ''(англ.)''
* Слова [http://forth-standard.org/standard/core/less &lt; (less-than)] и [http://forth-standard.org/standard/float/Fless F&lt; (f-less-than)] в черновике Forth 200x ''(англ.)''
* Слова [http://www.forth200x.org/documents/html3/core/less.html &lt; (less-than)] и [http://www.forth200x.org/documents/html3/floating/Fless.html F&lt; (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://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] ''(англ.)''
* [http://www.forth.com/starting-forth/sf4/sf4.html Decisions, Decisions…] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
Строка 142: Строка 67:
[[Категория:Примитивы]]
[[Категория:Примитивы]]
[[Категория:Операции сравнения Каллисто]]
[[Категория:Операции сравнения Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/⟨