求 2 的 n 次方
Set[exp2[0], 1];
SetDelayed[exp2[n_], Plus[exp2[Subtract[n, 1]], exp2[Subtract[n, 1]]]];
exp2[10]; // 1024
求斐波那契数项
Set[fib[0], 0];
Set[fib[1], 1];
SetDelayed[fib[n_], Plus[fib[Subtract[n, 1]], fib[Subtract[n, 2]]]];
fib[10]; // 55
求自然数有限项累加和
SetDelayed[natSum[sum_, 0], sum];
SetDelayed[natSum[sum_, nat_], natSum[Plus[sum, nat], Subtract[nat, 1]]];
SetDelayed[natSum[n_], natSum[0, n]];
natSum[4]; // 10
列表连接
SetDelayed[listJoin[{x___}, {}], {x}];
SetDelayed[listJoin[{x___},{y_,z___}],listJoin[{x,y},{z}]];
listJoin[{a,b}, {c,d,e}]; // {a,b,c,d,e}
实现 map
函数
SetDelayed[map[{},f_],{}];
SetDelayed[map[{x_,y___},f_],listJoin[{f[x]}, map[{y},f]]];
map[{a,b,c},f]; // {f[a],f[b],f[c]}
map[{1,2,3,4,5},fib]; // List[1, 1, 2, 3, 5]
实现自然数数项列表函数
SetDelayed[seq[x_, x_], { x } ];
SetDelayed[seq[x_, y_], listJoin[{x}, seq[Plus[x,1], y]]];
seq[0,10]; // {0,1,2,3,4,5,6,7,8,9,10}
map[seq[0,10],fib]; // List[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
求列表长度
SetDelayed[len[{}], 0];
SetDelayed[len[{x_,y___}],Plus[1,len[{y}]]];
len[{}]; // 0
len[{a}]; // 1