Языки программирования. Практический сравнительный анализ




Языки программирования. Практический сравнительный анализ - стр. 63


Таким образом, атом:<?> = <?> (сохраняет неопределенность).

 eq : X :: X = <Y,Z> & Y = Z --> T;

 X = <Y,Z> & Y /= Z --> F; <?>.

Таким образом, скажем, eq:<2,2,3> = <?>, так как аргумент не пара, а тройка.

 null : X :: X = <> --> T; X /= <?> --> F; <?>.

2.4.6.5. Сложение, вычитание, умножение, деление

+    : X :: X = <Y,Z> & числа (Y,Z) --> Y+Z; <?>.

-    : X :: аналогично.

mult : X :: аналогично. [Звездочка занята ]

div  : X :: аналогично. [Косая черта занята ]

2.4.6.6. Расписать левым, расписать правым

distl : X :: X = <Y,<>> --> <>;

 X = <Y,<Z1, ... , Zn>> --> <<Y,Z1>, ... , <Y,Zn>>; <?>.

distr : X :: X = <<>,Y> --> <>;

 X = <<Z1, ... , Zn>,Y> --> <<Z1,Y>, ... , <Zn,Y>>; <?>.Таким образом, функция distl "расписывает" левым элементом аргумента все элементы кортежа, который служит правым элементом аргумента функции, а функция distr, наоборот, "расписывает" правым элементом аргумента. Например

distl:<<A,B>,<C,D>> = <<<A,B>,C>,<<A,B>,D>>.

distr:<<A,B>,<C,D>> = <<A,<C,D>>,<B,<C,D>>>.

2.4.6.7. Транспонирование

trans : X ::

 X = <<X11, ... ,X1m>,          <<X11, ... ,Xn1>,

      <X21, ... ,X2m>,   -->     <X12, ... ,Xn2>,

            ...                        ...

      <Xn1, ... ,Xnm>>           <X1m, ... , Xnm>> ; <?>.

 Здесь для наглядности строки матрицы выписаны друг под другом. С подобной функцией мы работали в модели М. К не-матрицам она не применима (т.е. результат - <?> ).

2.4.6.8. Присоединить

appendl : X :: X = <Y,<>> --> <Y>;

 X = <Y,<Z1, ... ,Zn>> --> <Y,Z1, ... ,Zn>; <?>.




Содержание  Назад  Вперед