我对maple有点陌生,我对以下问题感兴趣。
假设我有一个映射f,它将a发送给abb,b发送给a。我的第一个问题是如何在maple上定义这个映射?我也感兴趣的是什么时候重复应用映射,即f的迭代。比方说,如果我有一个种子ab,有没有什么东西可以放在maple上,当我应用f时,它就变成了abba,依此类推?
谢谢
发布于 2015-02-28 02:24:30
希望这能有所帮助:
> 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]发布于 2015-02-28 05:49:21
您也可以使用字符串来完成此操作。
restart:
g := e->StringTools:-SubstituteAll(StringTools:-CharacterMap("ab","ta",e),"t","abb"):
g("a");
"abb"
g("b");
"a"
g("ab");
"abba"
(g@@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]
(F@@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( (g@@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( (F@@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等),并递归地拆分参数等,甚至学习这些模式。
https://stackoverflow.com/questions/28763079
复制相似问题