Справочное руководство по языку Fortran 95
Глава 2.Алфавитный справочник
Оператор INTENTОписание Оператор INTENT указывает преднамеренное использование фиктивного аргумента. Syntax INTENT ( intent-spec ) [ :: ] dummy-args Здесь: intent-spec есть IN или OUT dummy-args есть список разделенных запятыми фиктивных аргументов.Замечания Атрибут INTENT (IN) указывает, что фиктивный аргумент предназначен для получения данных из вызывающей единицы видимости. Фиктивный аргумент не должен переопределяться или становиться неопределенным во время исполнения процедуры. Атрибут INTENT (OUT) указывает, что фиктивный аргумент предназначен для возвращения данных в вызывающую единицу видимости. Всякий фактический аргумент, который ассоциируется с таким фиктивным аргументом, должен быть определяемым. Атрибут INTENT (IN OUT) указывает, что фиктивный аргумент предназначен для использования как для получения, так и для возвращения данных в вызвавшую единицу видимости. Всякий фактический аргумент, ассоциированный с таким фиктивным аргументом, должен быть определяемым. Оператор INTENT не должен специфицировать фиктивный аргумент, который представляет фиктивную процедуру или фиктивный указатель. Пример subroutine ex (a, b, c) real :: a, b, c intent (in) a intent (out) b intent (in out) c Оператор INTERFACEОператор INTERFACE возглавляет блок интерфейса. Такой блок специфицирует формы обращения к вызываемой процедуре. Блок интерфейса может быть использован для процедурного интерфейса, для определяемой операции или определяемого присваивания. Syntax INTERFACE [ generic-spec ] Здесь: generic-spec есть generic-name или OPERATOR ( defined-operator ) или ASSIGNMENT ( = ). generic-name есть имя групповой (generic) процедуры. defined-operator есть один из встроенных операторов или operator-name. operator-name есть определенное пользователем имя для операции, состоящее из от одной до 31 букв.Замечания Процедурный интерфейс Процедурный интерфейс состоит из характеристик процедуры, имени процедуры, имен и характеристик каждого фиктивного аргумента и групповых идентификаторов процедуры, если они есть. Оператор интерфейса с групповым именем указывает групповой интерфейс для каждой процедуры в блоке интерфейса.
Определяемые операции Если OPERATOR указан в операторе INTERFACE, то все процедуры, специфицированные в интерфейсном блоке должны быть функциями, на которые можно ссылаться как на определяемые операции. В случае функций двух аргументов подразумевается инфиксная форма записи операторов. В случае функций одного аргумента подразумевается префиксная запись операторов. OPERATOR не должен указываться для функций без аргументов или для функций с более чем двумя аргументами. Фиктивные аргументы не могут быть необязательными фиктивными объектами данных и должны быть указаны с INTENT (IN), а результат функции не должен иметь предполагаемую длину CHARACTER. Если оператор есть встроенный оператор, количество аргументов функций должно быть совместимо с встроенным использованием этого оператора. Данный определяемый оператор может, как и в случае с групповыми именами, применяться к более чем одной функции, и в таком случае он групповой в точной аналогии с групповыми процедурными именами. Для символов встроенного оператора групповые свойства включают встроенные операции, которые они представляют. Так как обе формы каждого оператора отношения имеют одинаковую интерпретацию, расширение одной формы (такой как <=) имеет эффект определения обеих форм (<= и .LE.). Определяемые присваиванияЕсли ASSIGNMENT указано в операторе INTERFACE, то все процедуры в блоке интерфейса должны быть подрутинами, на которые можно ссылаться как на определяемые присваивания. Каждая из этих подрутин должна иметь ровно два фиктивных аргумента. Каждый аргумент должен быть обязательным. Первый аргумент должен иметь INTENT (OUT) или INTENT (IN OUT), а второй аргумент должен иметь INTENT (IN). Определяемое присваивание трактуется как ссылка на подрутину, первый аргумент которой есть левая сторона присваивания, а вторым служит выражение справа от знака равенства. equals the second argument. Групповая спецификация ASSIGNMENT указывает, что операция присваивания расширяется или переопределяется, если обе стороны знака присваивания имеют один и тот же производный тип. Пример interface ! интерфейс без групповых спецификаций subroutine ex (a, b, c) implicit none real, dimension (2,8) :: a, b, c intent (in) a intent (out) b end subroutine ex function why (t, f) implicit none logical, intent (in) :: t, f logical :: why end function why end interface interface swap ! групповая процедура обмена subroutine real_swap(x, y) implicit none real, intent (in out) :: x, y end subroutine real_swap subroutine int_swap(x, y) implicit none integer, intent (in out) :: x, y end subroutine int_swap end interface interface operator (*) ! использует * для пересечения множеств function set_intersection (a, b) use set_module ! contains definition of type set implicit none type (set), intent (in) :: a, b type (set) :: set_intersection end function set_intersection end interface interface assignment (=) ! использует = для преобр. целого в биты subroutine integer_to_bit (n, b) implicit none integer, intent (in) :: n logical, intent (out) :: b(:) end subroutine integer_to_bit end interface Оператор INTRINSICОператор INTRINSIC указывает список имен, которые представляют встроенные процедуры. Такое действие позволяет использовать имя встроенной функции в качестве фактического аргумента. Syntax INTRINSIC [::] intrinsic-procedure-names Здесь: intrinsic-procedure-names есть список разделенных запятыми имен встроенных процедур.Замечания Появление группового имени встроенной функции в операторе INTRINSIC не лишает его групповых свойств Если указанное имя встроенной функции используется как фактический аргумент, это имя должно фигурировать в операторе INTRINSIC или должно получить атрибут intrinsic в операторе объявления типа в единице видимости. Допускается только одно появление имени во всех операторах INTRINSIC в единице видимости. Имя не может стоять одновременно в операторах и EXTERNAL и INTRINSIC в одной и той же единице видимости. Example intrinsic dlog, dabs ! dlog и dabs допустимы в качестве ! фактических аргументов call zee (a, b, dlog) Сабрутина INVALOPНачальный вызов подрутины INVALOP маскирует неверный оператор прерывания в устройстве с плавающей точкой. lflag должен быть установлен на true на первомм вызове. Последующие вызовы возвращают true или false в переменной lflag, если исключение соответственно имело или не имело места. Syntax INVALOP (lflag) Аргумент lflag должен иметь тип LOGICAL. Он получает значение true, если неверная операция имела место и false в противном случае. Пример call invalop (lflag) ! маскировка прерывания неверной операции Функция IORОписание Побитовое логическое исключающее OR. Syntax IOR (i, j) Аргументы i должен иметь тип INTEGER. j должен иметь тип INTEGER и ту же разновидность, что и i. Результат Результат имеет тип INTEGER той же разновидности, что и i. Пример i=53 ! i = 00110101 двоичное (младший байт) j=45 ! j = 00101101 binary (lowest-order byte) k=ior(i,j) ! k = 00111101 binary (lowest-order byte) ! k = 61 decimal Сабрутина IOSTAT_MSGВыдает сообщение о динамической ошибке ввода/вывода без прерывания программы. Syntax IOSTAT_MSG (iostat, message)Аргументы iostat должен иметь тип INTEGER. Это аргумент INTENT(IN), который передает значение IOSTAT от предшествующего оператора ввода/вывода. message должен иметь тип CHARACTER. Это аргумент вида INTENT(OUT), которому присваивается динамическое сообщение об ошибке, соответствующее значению IOSTAT в iostat. CHARACTER длины 256 достаточен для всех динамических ошибок в настоящее время. Но можно использовать и более длинное CHARACTER. Пример call iostat_msg(iostat, msg) ! msg получает ! динамическое сообщение об ошибке ! соответствующей iostat Функция ISHFTОписание Побитовый сдвиг. Syntax ISHFT (i, shift) Аргументы i должно быть типа INTEGER. shift должен иметь тип INTEGER. Его абсолютное значение должно быть меньше или равно количеству битов в i.Результат Результат имеет тип INTEGER и ту же разновидность, что и i. Его значение есть значение i, сдвинутого на shift позиций; если shift положителен, сдвиг происходит влево, если shift отрицателен, сдвиг происходит вправо. Выдвинутые за границы биты теряются. Пример i = ishft(3,2) ! i получает значение 12 Функция ISHFTCОписание Побитовый циклический сдвиг самых правых битов. Syntax ISHFTC (i, shift, size) Обязательные аргументы i должен иметь тип INTEGER. shift должен иметь тип INTEGER. Абсолютное значение shift должно быть меньше или равно size.Необязательный аргумент size должен иметь тип INTEGER. Значение size должно быть положительным и не больше, чем BIT_SIZE (i). Если он отсутствует дело происходит так, как будто он присутствует со значением BIT_SIZE (i).
Результат Результат имеет тип INTEGER и разновидность i. Его значение равно значению i после того, как size самых правых битов в представлении i будут циклически сдвинуты влево на shift позиций, если shift положителен, и вправо, если shift отрицателен. Пример i = ishftc(13,-2,3) ! i получит значение 11 Функция KINDОписание Параметр разновидности. Syntax KIND (x) Аргумент x может иметь любой встроенный тип. Результат Результат есть скаляр типа default INTEGER. Его значение равно значению параметра разновидности x. Пример i = kind (0.0) ! i получает значение 4 Функция LBOUNDОписание Нижние границы массива или нижняя граница одного из его измерений. Syntax LBOUND (array, dim)Обязательный аргументы array может быть массивом любого типа. Он не может быть скаляром и не должен быть указателем, который деассоциирован, или размещаемым массивом, который не размещен.
Необязательный аргумент
Результат Результат имеет тип default INTEGER. Если dim присутствует, результат есть скаляр со значением нижней границы измерения dim. Если dim отсутствует, результат есть массив ранга один с значениями, соответствующими нижним границам каждого измерений массива. Нижняя граница всякой секции массива всегда единица. Нижняя граница измерения нулевого размера также всегда единица. Пример integer, dimension (3,-4:0) :: i integer :: k,j(2) j = lbound (i) ! j получает значение [1 -4] k = lbound (i, 2) ! k получает значение -4 Функция LENОписание Длина объекта данных типа CHARACTER. Syntax LEN (string)Аргумент string должна иметь тип CHARACTER. Она может быть скаляром или иметь значением массив.
Результат Результат есть скаляр типа default INTEGER. Его значение есть количество символов в цепочке или в элементе цепочки, если string имеет значением массив. Пример i = len ('zee') ! i получает значение 3 Функция LEN_TRIMОписание Длина примитива типа CHARACTER без конечных пробелов. Syntax LEN_TRIM (string) Аргумент string должен иметь тип CHARACTER. Он может быть скаляром или иметь значением массив.Результат Результат есть скаляр типа default INTEGER. Его значение есть количество символов в цепочке (или в элементе цепочки, если string есть массив) минус количество конечных пробелов. Пример i = len_trim ('zee ') ! i получает значение 3 i = len_trim (' ') ! i получает значение ноль Функция LGEПроверяет на базе схемы упорядочивания ASCII, будет ли данная цепочка лексчески больше или равна другой цепочке. Syntax LGE (string_a, string_b) Аргументы string_a должна иметь тип default CHARACTER. string_b должна быть типа default CHARACTER.Результат Результат имеет тип default LOGICAL. Его значение есть true, если string_b предшествует цепочке string_a согласно схеме упорядочивания (collating sequence) ASCII или строки одинаковы, за исключением конечных пробелов; в противном случае результат есть false. Если обе цепочки имеют нулевую длину, результат есть true. Пример l = lge('elephant', 'horse') ! l получает ! значение false Функция LGTОписание Проверяет, не будет ли строка лексически больше, чем другая строка на основе упорядочивающей схемы (cllating sequence) ASCII. Syntax LGT (string_a, string_b) Аргументы string_a должна иметь тип default CHARACTER. string_b должна иметь тип default CHARACTER.Реультат Результат имеет тип default LOGICAL. Его значение есть true если string_b предшествует string_a в смысле схемы упорядочивания ASCII; в противном случае результат есть false. Если обе цепочки имеют нулевую длину, результат есть false. Пример l = lgt('elephant', 'horse') ! l получает значение false Функция LLEПроверяет, не является ли одна цепочка лексически меньше чем или равна другой цепочке на на основе схемы упорядочивания ASCII. Syntax LLE (string_a, string_b) Аргументы string_a должен иметь тип default CHARACTER. string_b должен иметь тип default CHARACTER.Результат Результат имеет тип default LOGICAL. Его значение есть true, если цепочка string_a предшествует цепочке string_b в смысле схемы упорядочения ASCII или если цепочки совпадают, не считая конечные пробелы; в противном случае результат есть false. Если обе цепочки имеют нулевую длину, то результат есть true. Пример l = lle('elephant', 'horse') ! l получает значение true Функция LLTПроверяет, оказывается ли одна цепочка лексически меньше, чем другая цепочка на основе схемы упорядочения ASCII. Syntax LLT (string_a, string_b) Аргументы string_a должен иметь тип default CHARACTER. string_b должен иметь тип default CHARACTER.Результат Результат имеет тип default LOGICAL. Его значение есть true, если string_a предшествует string_b соласно упорядочиванию ASCII. В противном случае результат есть false. Если обе цепочки имеют нулевую длину, результат есть false. Пример l = llt('elephant', 'horse') ! l получает значение true |
<<< | Оглавление | Страницы: 13 14 | >>> |