2015-02-27 2 views
0

Я немного новичок в клене, и меня интересует следующий вопрос.Правило замены на клене

Предположим, что у меня есть карта f, которая отправляет abb и b в a. Мой первый вопрос: как определить эту карту на клене? Меня также интересует, когда карта применяется повторно, т. Е. Итерации f. Скажите, есть ли у меня семя ab, есть ли что-то, что я могу положить на клен, так что, когда я применяю f, он становится abba и так далее?

Спасибо

ответ

0

Надеются, что это помогает:

> f(a) := a,b,b; 
          a, b, b 
> f(b) := a; 
           a 
> map(f, [a, b]); 
          [a, b, b, a] 
> map(f, %); 
        [a, b, b, a, a, a, b, b] 
+0

Большое спасибо за помощь! Его очень ценят. – Tonardo

0

Вы также могли бы сделать это с помощью строки.

restart: 

g := e->StringTools:-SubstituteAll(StringTools:-CharacterMap("ab","ta",e),"t","abb"): 

g("a"); 
           "abb" 

g("b"); 
           "a" 

g("ab"); 
           "abba" 

([email protected]@2)("ab"); 
          "abbaaabb" 

subs(["a"=a,"b"=b],StringTools:-Explode(g("ab"))); 
          [a, b, b, a] 

f(a) := a,b,b; 
          f(a) := a, b, b 

f(b) := a; 
           f(b) := a 

map(f, [a, b]); 
          [a, b, b, a] 

map(f, %); 
         [a, b, b, a, a, a, b, b] 

F := e->map(f,e): 

F([a, b]); 
          [a, b, b, a] 

([email protected]@2)([a, b]); 
         [a, b, b, a, a, a, b, b] 

evalb(subs(["a"=a,"b"=b],StringTools:-Explode(g("ab"))) = F([a, b])); 
           true 

ans1 := CodeTools:-Usage(([email protected]@20)("ab")): 
memory used=6.01MiB, alloc change=4.01MiB, cpu time=100.00ms, real time=102.00ms, gc time=0ns 

ans1list := CodeTools:-Usage(subs(["a"=a,"b"=b],StringTools:-Explode(ans1))): 
memory used=32.00MiB, alloc change=32.01MiB, cpu time=170.00ms, real time=175.00ms, gc time=0ns 

ans2 := CodeTools:-Usage(([email protected]@20)([a, b])): 
memory used=128.11MiB, alloc change=21.02MiB, cpu time=3.81s, real time=3.82s, gc time=3.46s 

evalb(ans1list = ans2); 
           true 

Кроме того, можно написать либо g или F жевать большие куски (длиной 2 или 4, и т.д.), и рекурсивно разделить аргумент, и т.д., и даже узнать такие узоры.