Альтернативы, подобные ( 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). Нет, он не знает русского языка. Да, переводы его советов ещё появятся в «Баголовке Злога».
Комментариев нет:
Отправить комментарий