Ваш вопрос немного неясен.Просто угадать, что вы имели в виду - это приведет к самому длинному совпадению:
In[2]:= {a, b, c, d, e} /. {start : Longest[___], x_, stop : ___} :> {start, 1, stop}
Out[2]= {a, b, c, d, 1}
Хотя это даст все возможные результаты применения правила, а не только первое совпадение:
In[3]:= ReplaceList[{a, b, c, d, e}, {start : ___, x_, stop : ___} :> {start, 1, stop}]
Out[3]= {{1, b, c, d, e}, {a, 1, c, d, e}, {a, b, 1, d, e}, {a, b, c, 1, e}, {a, b, c, d, 1}}
HTH
Редактировать:
Отвечая на более изощренную версию вопроса, можно получить общий ответ:
{a, b, c, d, e} /. {start_, x__, end_} :> {f[start], g[x], h[end]},
Где, указав функции f,g,h
, можно сделатьлюбые виды преобразований отдельно по первому, последнему и среднему элементам.Иногда вы можете использовать правила внутри правил, чтобы сделать его более кратким, например:
In[7]:= {a, b, c, d, e} /. {start_, x__, end_} :> {start /. _ -> "First",
Sequence @@ Replace[{x}, _ -> 1, 1], end /. _ -> "Last"}
Out[7]= {"First", 1, 1, 1, "Last"}
Но главное в том, что после того, как вы деструктурировали список, не имеет значения, что вы используете для преобразования различных частей.- правила снова или функции и т. д. - вы не ограничены использованием только правил в этот момент.