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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''0=''' (нулю равно) — стандартное слово [[Каллисто]]. Проверить на равенство нулю.
'''0=''' (нулю равно) — стандартное слово [[Каллисто]]. Проверить на равенство нулю.
  0=            ( x -- f )                      Проверка на равенство нулю.
  0=            ( x -- f )                      Проверка на равенство нулю.
[[Файл:CallistoLogic.png|thumb|right|264px|Пример работы слова 0=]]
Сравнивает x с нулём и засылает в стек флаг «истинно» (f=−1), если x равен нулю и флаг «ложно» (f=0), если x отличен от нуля.
Сравнивает x с [[FALSE|нулём]] и засылает в стек флаг «истинно» (f=−1), если x равен нулю и [[FALSE|флаг «ложно»]] (f=0), если x отличен от нуля.


== Ввод слова 0= ==
== Ввод слова 0= ==
В [[Режим NUM|режиме NUM]] последовательно нажмите три клавиши [[Клавиша 0|{{Серая клавиша|0}}]]   [[Клавиша F|{{Оранжевая клавиша|F}}]] {{ШГ←}}
В [[Режим NUM|режиме NUM]] последовательно нажмите три клавиши [[Клавиша 0|{{Серая клавиша|0}}]]   [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]]


== 0= и F0= в стандарте ANS Forth ==
== Детали реализации ==
Если на стеке лежит логическое значение (флаг), слово 0= меняет его противоположное. Флаг «истинно» (x=−1 и любое ненулевое значение) превращается во флаг «ложно» (f=0). Флаг «ложно» (x=0) превратится во флаг «истинно» (f=−1). Этим объясняется широкая практика использования 0= для логического отрицания. Фактически это слово NOT, и во многих Фортах оно имеет такое второе название.
 
Слово 0= возвращает −1 в качестве флага «истинно», что позволяет использовать результат f в логических операция [[Слово AND|AND]], [[Слово OR|OR]], [[Слово XOR|XOR]] и [[Слово NOT|NOT]]. Разумеется, при этом другие аргументы этих операций тоже должны использовать −1 в качестве флага «истинно». Все слова [[Каллисто]], возвращающие флаги, используют в качестве флага «истинно» −1.
 
В отличии от [[Слово NOT|NOT]], слово 0= превращает во флаг «ложь» не только −1, но и любое ненулевое значение. Применив 0= дважды, можно «нормализовать» флаг, превратив любое ненулевое значение в −1.
 
== 0= в стандарте ANS Forth ==
  6.1.0270  0=                            "zero-equals"                    CORE
  6.1.0270  0=                            "zero-equals"                    CORE
             ( x -- flag )
             ( x -- flag )
             flag - true, если и только если x - равно нулю.
             flag - true, если и только если x - равно нулю.


== F0= в стандарте ANS Forth ==
  12.6.1.1450  F0=                      "f-zero-equals"                FLOATING
  12.6.1.1450  F0=                      "f-zero-equals"                FLOATING
             ( -- flag ) ( F: r -- ) or ( r -- flag )
             ( -- flag ) ( F: r -- ) or ( r -- flag )
             flag - true, если и только если r - равно нулю.
             flag - true, если и только если r - равно нулю.


== История ==
== 0= в предыдущем стандарте Forth-83 (англ.) ==
В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово 0=
 
В Форте-79 слово NOT было определено, как синоним 0=
 
Если программы переносятся с Форта-79 или fig-Форта на [[Каллисто]], их слово NOT должно заменяться на 0=
 
=== 0= в предыдущем стандарте Forth-83 (англ.) ===
       0=          w -- flag                    83      "zero-equals"
       0=          w -- flag                    83      "zero-equals"
           flag is true if w is zero.
           flag is true if w is zero.


=== 0= в стандарте Forth-79 (англ.) ===
== 0= в стандарте Forth-79 (англ.) ==
  0=            n -- flag                    180      "zero-equals"
  0=            n -- flag                    180      "zero-equals"
     True if n is zero.
     True if n is zero.


=== 0= в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== 0= в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  0=            n  ---  f                        L0
  0=            n  ---  f                        L0
         Leave a true flag is the number is equal to zero, otherwise leave a
         Leave a true flag is the number is equal to zero, otherwise leave a
         false flag.
         false flag.


== Реализация ==
== История ==
Если на стеке лежит логическое значение (флаг), слово 0= меняет его противоположное. Флаг «истинно» (x=−1 и любое ненулевое значение) превращается во флаг «ложно» (f=0). Флаг «ложно» (x=0) превратится во флаг «истинно» (f=−1). Этим объясняется широкая практика использования 0= для логического отрицания. Фактически это слово NOT, и во многих Фортах оно имеет такое второе название.
В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово 0=


Слово 0= возвращает −1 в качестве флага «истинно», что позволяет использовать результат f в логических операция [[AND]], [[OR]], [[XOR]] и [[NOT]]. Разумеется, при этом другие аргументы этих операций тоже должны использовать −1 в качестве флага «истинно». Все слова [[Каллисто]], возвращающие флаги, используют в качестве флага «истинно» −1.
В Форте-79 слово NOT было определено, как синоним 0=


В отличии от [[NOT|каллистянского NOT]], слово 0= превращает во флаг «ложь» не только −1, но и любое ненулевое значение. Применив 0= дважды, можно «нормализовать» флаг, превратив любое ненулевое значение в −1.
Если программы переносятся с Форта-79 или fig-Форта на [[Каллисто]], их слово NOT должно заменяться на 0=
<pre>
866 ;              ∗∗ Стандартные слова ∗∗
867 ;              ∗∗ Условные операторы ∗∗
868 ;
869 ;#ZeroEqual
870 ; 0=              ( x −− f )                          Проверить на равенство нулю.
871 ; Слово 0= часто используется, как логическое отрицание NOT. Заменяет 0 на −1 и наоборот.
872 LZEQU:          .DB    2
873                .TEXT  "0="                    ; ( x −− флаг )
874                .DW    LIPRG
875 ZEQU:          .DW    JZEQU
876 JZEQU:          PKRM03  PX!=0 STT
877 STF:            Cx PKM03  KGOTO9                ; [SP] := 0; NEXT
886 STT:            1 +/− PKM03  KGOTO9            ; [SP] := −1; NEXT
</pre>
Реализации из SP-Forth 4.20:
<pre>
CODE 0= ( x -- flag ) \ 94
\ flag "истина" тогда и только тогда, когда x равно нулю.
    SUB  EAX, # 1
    SBB  EAX, EAX
    RET
END-CODE
</pre>
<pre>
\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


\ Operations
== Реализация ==
\ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 
 
CODE F0=     \ *
      LEA EBP, -4 [EBP]
      MOV [EBP], EAX
      XOR EBX, EBX
      FTST
      FFREE ST
      FINCSTP
      FSTSW EAX
      SAHF
      JNZ SHORT @@1
      MOV EBX, # -1
@@1:  MOV EAX, EBX
      RET
END-CODE
</pre>
 
=== Советская реализация ===
Слово 0= в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
Слово 0= в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
<PRE>
<PRE>
Строка 119: Строка 72:


== Ссылки ==
== Ссылки ==
* {{Исходник|ZeroEqual|0&#61;}}
* {{Исходник|ZeroEqual|0=}}
* См. слова [[NOT]], [[Слово =|=]], [[0⟨|0&lt;]] и [[0⟩|0&gt;]]
* См. слова [[Слово NOT|NOT]], [[Слово =|=]], [[0⟨|0&lt;]] и [[0⟩|0&gt;]]
* См. также [[=|символ =]]
* См. также [[=|символ =]]
* Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0270 0= (zero-equals)] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1450 F0= (f-zero-equals)] в стандарте ANS Forth ''(англ.)''
* Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0270 0= (zero-equals)] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1450 F0= (f-zero-equals)] в стандарте ANS Forth ''(англ.)''
Строка 128: Строка 81:




{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
Строка 133: Строка 87:
[[Категория:Одноместные операции Каллисто]]
[[Категория:Одноместные операции Каллисто]]
[[Категория:Операции сравнения Каллисто]]
[[Категория:Операции сравнения Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:Описание бета-версии Каллисто]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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