РЕЖИМ ОПРЕДЕЛЕНИЙ
Как вы уже знаете из первой главы, новые слова можно определять с помощью чисел и ранее определенных слов. Теперь, используя некоторые из изученных нами арифметических операций, рассмотрим другие возможности языка.
Допустим, вы хотите перевести различные единицы измерения в дюймы. Вам известно, что 1 ярд = 36 дюймам и 1 фут = 12 дюймам1. Поэтому вы можете определить эти два слова следующим образом: : ЯРД>ДМ ( ярды -- дюймы ) 36 * ; ок
: фУТ>ДМ ( футы -- дюймы ) 12 * ; ок
Здесь определяемые имена означают «ярды-в-дюймы» и «футы-в-дюймы» соответственно. Ниже приводятся примеры выполнения указанных слов: 10 ЯРД>ДМ . 360 ок 2 ФУТ>ДМ . 24 ок
1 дюйм = 2,54 см, 1 фут = 30,48 см, 1 ярд = 0,914 м. — Примеч. пер.
Если результат должен всегда выражаться в дюймах, то необходимо ввести следующие определения: : ЯРДОВ ( ярды -- дюймы ) 36 * ; ок : ФУТОВ ( футы -- дюймы ) 12 * ; ок : ДЮЙМОВ ( -- ) ; _ok
Таким образом, можно записать выражение: 10 ЯРДОВ 5 ФУТОВ + 9 ДЮЙМОВ + . 429 ок
Отметим, что назначение слова ДЮЙМОВ — напомнит вам, для чего здесь поставлено число 9. Если вы хотите писать грамотно, то должны добавить три определения: : ЯРД ЯРДОВ ; ок : ФУТ ФУТОВ ; ок : ДЮЙМ ; ок
Набирая при вводе эти существительные в единственном числе, вы получите такой же результат: 1 ЯРД 5 ФУТОВ + 1 ДЮЙМ + . 97 ок 6 ЯРДОВ 1 ФУТ + . 228 ok
До сих пор мы вводили слова, определения которых содержали только одну арифметическую операцию. Но с тем же успехом вы можете при необходимости использовать внутри любого определения несколько операций.
Допустим, вы хотите получить слово, которое суммирует пять чисел, находящихся в стеке. Ранее мы уже суммировали пять чисел следующим образом: 17 20 + 132 + 3 + 9 + . 181 ok
однако можно набрать на клавиатуре и такую строку: 17 20 132 3 9 + + + + . 181 ok
Мы получили тот же ответ, несмотря на то что собрали все числа в одну группу, а все знаки операций — в другую. Запишем наше определение так:: 5#СУММА ( n1 n2 n3 n4 n5 — сумма ) + + + + ; ок
и выполним слово, как показано ниже: 17 20 132 3 9 5#СУММА . 181 ок
Ниже приводится еще одно выражение, для которого нужно записать определение1: (а + b) * с
1Для начинающих, которым нравятся задачи, сформулированные словесно. Реактивный самолет летит со средней скоростью 600 миль/ч. Скорость попутного ветра составляет 25 миль/ч. Сколько миль пролетит этот самолет при таких условиях за пять часов? Если мы определим слово
: РАССТОЯНИЕ ( время скорость попутный—ветер — расстояние ) + * ;
то можно затем ввести следующее:5 600 25 РАССТОЯНИЕ . 3125 ок
Попытайтесь выполнить это слово с различными значениями, учитывая и встречный ветер (отрицательные значения).
Как вы видели из упр. 2-А, это выражение может быть записано в постфиксной форме: с а b + *
Итак, мы можем записать наше определение: : РЕШЕНИЕ ( с a b — п ) + * ; ок