求 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