Cтраница 1
Невычисляемые выражения могут служить параметрами примитивных функций со значениями типа образец. Образец строится, но параметр не вычисляется до момента сопоставления. [1]
Невычисляемые выражения позволяют определять образцы рекурсивно. [2]
В ДЛИНОБР невычисляемые выражения употребляются двояким образом. ОБР позволяет построить ДЛИНОБР при неизвестном значении ОБР, которое определяется во время сопоставления. Предикат ОТ ( 512Е ( ПРОБА), 512Е ( ДЛ)) вычисляется всякий раз, когда ОБР сопоставится с подцепочкой. Сравниваются длины цепочек ПРОБА и ДЛ. Если новая подцепочка короче, вычисление предиката заканчивается неудачей. Неудача при вычислении предиката или функции в процессе сопоставления заставляет сканер вернуться назад в поисках альтернатив. [3]
Если параметром является невычисляемое выражение, оно вычисляется и его значение становится значением функции. Если параметр - цепочка, значением EVAL служит значение выражения, представленного цепочкой. Целый и вещественный параметры просто возвращаются без всяких изменений. [4]
В этой главе невычисляемые выражения, часто называемые просто выражениями, рассматриваются лишь в контексте сопоставления с образцом. [5]
Стиль работы с невычисляемыми выражениями иллюстрируется следующим примером. Вводятся две цепочки исходных данных, и строится список слов, входящих в обе цепочки. [6]
Функция EVAL может вычислить любую цепочку или невычисляемое выражение, представляющие собой синтаксически правильное выражение языка Снобол-4. Если в параметре есть синтаксическая ошибка, функция EVAL завершается неудачей. [7]
Образцы, подобные ДЛИНОБР, описанному в разделе о невычисляемых выражениях, в режиме быстрого просмотра могут дать неожиданные результаты. [8]
Применение в этом режиме образцов, содержащих немедленное присваивание значения или невычисляемые выражения, может привести к неожиданным результатам. Здесь мы опишем эвристики, используемые сканером для ускорения процесса сопоставления. Особо отметим случаи, когда могут появиться неожиданные результаты и укажем, как с ними бороться. Начальное значение ключевого слова & FULLSCAN равно нулю, что определяет обычный, или быстрый, режим просмотра при сопоставлении. [9]
В следующем примере значением ЦЕП является цепочка, а значением НВ - невычисляемое выражение. [10]
Создание образца нельзя вынести из цикла еще и потому, что меняется значение С. Использование невычисляемого выражения вместо переменной С все же позволяет построить структурный образец вне цикла. Как показано ниже, структурный образец НАЙТИС вместо С содержит С. Значение С, используемое при этом, есть текущее значение, в данном случае - значение, присвоенное при сопоставлении с образцом СЛОВО. [11]
Все компоненты инструкции могут быть сколь угодно сложными, и их обработка может быть весьма разнообразной. Например, обращения к определяемым программистом функциям могут встречаться в любой компоненте инструкции ( кроме метки); они могут иметь место даже в процессе сопоставления с образцом при вычислении невычисляемых выражений. [12]
В режиме быстрого просмотра принимаются все меры, чтобы избежать рекурсивных циклов. Многие трудности, связанные с циклами, можно обойти за счет опережающего просмотра, когда число оставшихся литер сравнивается с числом требуемых литер в предположении, что для сопоставления с невычисляемыми выражениями необходима по крайней мере одна литера. [13]
Основная цель данной главы - подробно рассмотреть те средства языка Снобол-4, которые программист может использовать для написания выражений, значением которых являются структурные образцы. К этим средствам относятся операции конкатенации и альтернации, служащие для создания структурных образцов, примитивные структурные образцы, встроенные в систему, примитивные функции, значениями которых являются структурные образцы, операции присваивания значения и одноместная операция, порождающая невычисляемое выражение. [14]
Образец - это объект данных, который может быть очень большим, если образец сложный. Невычисляемые выражения позволяют избежать конструирования образцов в инструкциях сопоставления, даже если меняются компоненты образца. Невычисляемое выражение эквивалентно указателю на другой образец, который используется во время сопоставления, когда встречается невычисляемое выражение. [15]