воскресенье, 18 марта 2012 г.

Нафига он нужен, этот Replace

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

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

Отправить комментарий