Программирование в Mathematica

paha73

почему не срабатывает вот такое правило?
Replace[{"abd"}, {"a" ~~ z__} -> {"la-la-la"}];

Hana7725

Потому, что не воспринимает правильно {"a" ~~ z__}, z__ - это шаблон для последовательности аргументов (элементов списка). Для строк есть команда StringReplace.

paha73

Потому, что не воспринимает правильно {"a" ~~ z__}, z__ - это шаблон для последовательности аргументов (элементов списка). Для строк есть команда StringReplace.
на самом деле у меня и есть список из строк и шаблон хочется задавать для всей этой
последовательности.
Скажем так, заменить в последовательности строку "220" на строку "да", если после строки "220" где-то встретилась строка, начинающаяся с восклицательного знака.
Replace[{"1002", "220", "22", "!...."}, {x___, "220", y___, "!....", z___} -> {x, "yyyes", y, "!....", z}]
может для такого случая есть шаблон строки, начинающейся с конкретной буквы?

paha73

StringReplace
а эта, онаж еще и по подстрокам искать будет

Hana7725

на самом деле у меня и есть список из строк и шаблон хочется задавать для всей этой последовательности.

Речь была не о том. Что-то лень объяснять.
А сделать можно так:

StringJoin/@StringSplit[#, ""]&/@{"1002","220","22","!....","200"})
/. {x___, StringSplit["220", ""], y___, {"!", s___},z___} -> {x, "yyyes", y, {"!", s}, z})
Получится
{"1002", "yyyes", "22", "!....", "200"}  

ЗЫ А проще так:
{"1002","220","22","!....","200"}/.{x___, "220", y___, s_/;StringTake[s, 1]=="!",z___}->{x, "yyyes", y, s, z}  

paha73

спасибо
большое спасибо

paha73

Nanana = {{1, 2}, {3, 4}, {5, 6}};
Tratata[n_Integer] := Module[{k = 0},
If[First[#] == n, k = Last[#]] & /@ Nanana;
If[k == 0, Print["Error in Tratata with n = ", n]; Return["Error "], Return[k]];
];
Tratata[n_Integer] := Module[{},
If[First[#] == n, Return[Last[#]]] & /@ Nanana;

Print["Error in Tratata with n = ", n];
Return["Error"];
];
Две, как мне кажется, одинаковые фунции, но в первой на запрос
Tratata[1] замена срабатывает, во второй нет...

Hana7725

"If all else fails, read the instructions" (c) :)
Return exits only the innermost construct in which it is invoked
Можно так:
Tratata[n_Integer] := 
Catch[Module[{}, If[First[#] == n, Throw[Last[#]]] & /@ Nanana
Print["Error in Tratata with n = ", n];
Return["Error"];];]

paha73

Return exits only the innermost construct in which it is invoked
хочешь сказать он из внутреннего Ифа только выходит?
за вариант спасибо :)

Hana7725

Return вывел бы из блока, только если бы имел вид отдельного оператора, скажем, Return[2]. Так происходит в первом случае. А
 If[First[#] == 1, Return[Last[#]]] & /@ Nanana  
даст
{Return[2], Null, Null}  

paha73

Ясненько, спасибо.
Скажи, плиз, в математике есть что-то хорошее для перевода строки в число?
или это только через код символа можно сделать?

Hana7725

А что, хелп уже кончился? :)
ToExpression

paha73

еслиб мне хелп во всем помогал, яб тут не спрашивала
считай, что не справилась с хелпом
спасибо
Оставить комментарий
Имя или ник:
Комментарий: