Такой баголовок такого Злога.

среда, 20 сентября 2006 г.

Советы и трюки: альтернативы

Альтернативы, подобные ( p1 | p2 | p3 ) удобны в том случае, когда необходимо использовать несколько возможных шаблонов одновременно. Например, алтернатива ( _Sin | _Cos | _Tan ) удовлетворяет выражениям с заголовками Sin, Cos, или Tan.



{2, Sin[1] + x, Cos[1] - 1, 3.4, Tan[x + 1]} /. (_Sin | _Cos | _Tan) -> Trigonometric

{2, Trigonometric + x, -1 + Trigonometric, 3.4, Trigonometric}

А вот так можно определить функцию, единственнный аргумент которой может принимать только вещественные или целые значения:



Clear[f, s]

f[x_Real | x_Integer] := x + 1

{f[2], f[2.4], f[2, 4], f[s]}

{3,3.4,f[2,4],f[s]}

Видно, что значение функции, не удовлетворяющей шаблону, не вычисляется.


Далее рассмотрим функцию, определённую для ненулевого количества вещественных, либо целочисленных, аргументов. Обратите внимание на слово «либо». В этом случае важно, чтобы аргументы были только одного типа.



Clear[f, s]

f[x__Real | x__Integer] := x + 1

{f[2], f[2.4], f[2, 4], f[2.4, 2.1], f[2, 2.4], f[s]}

{3,3.4,7,5.5,f[2,2.4],f[s]}

Вместо (x__Real | x__Integer) можно писать x:(__Real | __Integer).

Нет, это всё не я сочинил, а Тед Эрсек (Ted Ersek). Нет, он не знает русского языка. Да, переводы его советов ещё появятся в «Баголовке Злога».

Комментариев нет: