Справочное руководство по языку 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 может быть массивом любого типа. Он не может быть скаляром и не должен быть указателем, который деассоциирован, или размещаемым массивом, который не размещен.

Необязательный аргумент
dim должен иметь тип INTEGER и определять порядковый номер измерения массива.

Результат

Результат имеет тип 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 >>>