3

Мне нужно определить чистую функцию, которая принимает два аргумента и возвращает их частное. Если делитель 0, то я хочу вернуть 0.соответствие шаблону в чистых функциях

Если бы я был именем функции, то я бы

div[_, 0] := 0 
div[x_, y_] := x/y 

как сделать такой же шаблону на аргументы в чистой функции #1/#2 &?

ответ

2

Switch может быть полезным, например:

Switch[ # , 
     _String , StringLength[#] , 
     _List , Length[#] , 
     __ , Null ] & /@ { "abc", {1, 2, 3, 4}, Pi} 

{3, 4, NULL}

4

Try что-то вроде

If[#2 == 0, 0, #1/#2] & 

для чистой функции.

+0

спасибо. похоже, я не могу выполнить сопоставление шаблонов в чистой функции, правильно? Мой пример надуман. Да, я могу проверить, равен ли второй аргумент нулю. Я искал способ сделать сопоставление шаблонов в целом. – akonsu

+0

'Если [MatchQ [#, pattern], ...] &' ... или вы можете посмотреть 'Switch' – agentp

+0

@agentp спасибо, я использовал' Switch', пожалуйста, напишите этот комментарий как ответ – akonsu

1

Можно использовать комбинацию Replace и Condition для достижения соответствия аналогичный узор на аргументы чистой функции

Replace[_, {_ /; #2 == 0 -> 0, _ :> #1/#2}] & 

Например

Replace[_, {_ /; #2 == 0 -> 0, _ :> #1/#2}] &[a, 2] 

a/2

и

Replace[_, {_ /; #2 == 0 -> 0, _ :> #1/#2}] &[a, 0] 

0


Дополнительные подходы и более расширенное обсуждение можно найти на https://mathematica.stackexchange.com/questions/3174/using-patterns-in-pure-functions

 Смежные вопросы

  • Нет связанных вопросов^_^