В рамках программы подготовки к неизбежно приближающемуся склерозу.Есть в Математике такая функция
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}]]]
Комментариев нет:
Отправить комментарий