В рамках программы подготовки к неизбежно приближающемуся склерозу.Есть в Математике такая функция
Replace. Долгое время я ее считал практически бесполезной, в отличии от ее старших родственников
ReplaceAll (/.) и ReplaceRepeated(//.). Но недавно я осознал, что эта функция является мощной заменой функции Switch. А именно,Switch[expr, form1, value1, form2,value2,...] в подавляющем большинстве случаев можно заменить на
Replace[expr, {form1:> value1, form2:>value2,...}]Преимущество в том, что именнованные части паттерна
formi можно использовать при построении valuei. Ну вот, теперь я понимаю зачем нужна функция Replace. Жалко только, что теперь я не понимаю зачем нужна функция Switch. Вот, кстати, пример использования
Replace в процедуре SplitCases, которую, я думаю, стоит включить в следующий релиз Математики:SplitCases[l_List,ps_List]:=Module[ {pls=Table[{},{Length[ps]}],pn},
Append[pls,#]&[Replace[l,MapIndexed[pn:#:>(pls[[First@#2]]=Append[pls[[First@#2]],pn];Unevaluated[Sequence[]])&,ps],{1}]]]
Комментариев нет:
Отправить комментарий