Редактирование:
IF
(раздел)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
== История == «Разрушающий» (снимающий со стека верхнее значение) IF пришёл в Каллисто из Форта. Условный оператор был изобретён [https://ru.wikipedia.org/wiki/Маккарти,_Джон Джоном Маккарти] для языка Лисп в 1957-58 годах ([http://www-formal.stanford.edu/jmc/history/lisp/node2.html англ.]) на основе условного перехода, существовавшего в то время в Фортране. Будучи в комитете по разработке Алгола, Маккарти также внёс условный оператор в Алгол, откуда он и вошёл в Форт и другие языки программирования. В конце 1950-ых годов, когда Чак Мур программировал для [https://ru.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B8%D1%82%D1%81%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F САО] отслеживание советских спутников, фортрановский оператор IF … ELSE IF позволял выбирать команды интерпретатора по первому символу. Использование такого интерпретатора позволяло вводить (посредством [https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D1%84%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D0%B0 перфокарт]) разные уравнения для нескольких спутников, без дорогостоящей компиляции основной программы. Слово IF впервые появилось в программе 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 Стэнфордский университет]). Необычный постфиксный условный оператор является модификацией условного оператора, взятого из Алгола: Алгол — IF выражение THEN истина ELSE ложь CURVE — стек IF истина ELSE ложь THEN «Истина» интерпретировалась, если на стеке был не-нуль. THEN предлагал уникальное завершение, отсутствие которого в Алголе всегда вводило в замешательство Чака Мура. Подобные выражения интерпретировались: IF сканировал вперёд до ELSE или THEN. В 1970 году неразрушающий условный оператор IF ELSE THEN был реализован Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500. Следущий код B-5500 FORTH проверял вершину стека на истинность и дублировал её, если она истина (аналог [[?DUP]]): IF DUP THEN В 1971-73 годах Чак Мур перенёс Форт на DEC PDP-11 в [https://en.wikipedia.org/wiki/National_Radio_Astronomy_Observatory National Radio Astronomy Observatory] (''англ.'', [https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D1%80%D0%BB%D0%BE%D1%82%D1%81%D0%B2%D0%B8%D0%BB%D0%BB_%28%D0%92%D0%B8%D1%80%D0%B3%D0%B8%D0%BD%D0%B8%D1%8F%29 Шарлотсвилл]). Появился ''косвенный шитый код'' (''англ.'' indirect-threaded code), который изменил структуры управления, включая IF … THEN. Они получили элегантную реализацию с адресами на [[Стек данных|стеке данных]] во время компиляции. В {{colorForth}} Чак Мур вернулся к «неразрушающему» IF. Мотивацией послужило то, что лучше явно писать IF DROP где это необходимо, а последовательности DUP IF или ?DUP IF расходуют машинное время впустую. === IF в предыдущем стандарте Forth-83 (англ.) === IF flag -- C,I,79 -- sys (compiling) Used in the form: flag IF ... ELSE ... THEN or flag IF ... THEN If flag is true, the words following IF are executed and the words following ELSE until just after THEN are skipped. The ELSE part is optional. If flag is false, the words from IF through ELSE , or from IF through THEN (when no ELSE is used), are skipped. sys is balanced with its corresponding ELSE or THEN . See: "9.9 Control Structures" === IF в стандарте Forth-79 (англ.) === IF flag -- I,C,210 Used in a colon-definition in the form: flag IF ... ELSE ... THEN or flag IF ... THEN If flag is true, the words following IF are executed and the words following ELSE are skipped. The ELSE part is optional. If flag is false, words between IF and ELSE, or between IF and THEN (when no ELSE is used), are skipped. IF-ELSE-THEN conditionals may be nested. === IF в fig-FORTH Release 1 glossary, май 1979 (англ.) === IF f --- (run-time) -- addr n (compile) P,C2,L0 Occurs is a colon-definition in form: IF (tp) ... ENDIF . IF (tp) ... ELSE (fp) ... ENDIF At run-time, IF selects execution based on a boolean flag. If f is true (non-zero), execution continues ahead thru the true part. If f is false (zero), execution skips till just after ELSE to execute the false part. After either part, execution resumes after ENDIF. ELSE and its false part are optional.; if missing, false execution skips to just after ENDIF.. At compile-time IF compiles 0BRANCH and reserves space for an offset at addr. addr and n are used later for resolution of the offset and error testing.
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Pmkwiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице