TGDZCalc by Maple function
Maple与Mathmatica的用法有点类似,浅学一下不太困难.
它用小圆括号来包括函数参数,这一点比较好.但在工作表模式下,我的输入法有了点问题,不能输入中文,只好复制粘贴进来.
Maple中的中文字符是3个字节大小,可能用的是UTF-8的表示方式,因此查询字串长度与截取字串时要注意一下转换,但总的来说,与以前见过的其它语言一样处理即可.
用proc定义函数即可,最后一个变量的值就是返回值.
点击查看代码
getBaseYear := proc(y)
local b;
if 0 < y then b := 4;
else
b := -3;
end if;
while y < b do
b := b - 60;
end do;
while b + 60 <= y do
b := b + 60;
end do;
end proc
YearToTGDZ := proc(year)
local y, m, t, d, tgArr, dzArr;
tgArr := "甲乙丙丁戊已庚辛壬癸";
dzArr := "子丑寅卯辰已午未申酉戌亥";
y := year;
if 0 < y then y := y - 4;
else y := y - 3;
end if;
while y < 0 do y := y + 60; end do;
t := y mod 10;
d := y mod 12;
cat(substring(tgArr, 3*t + 1 .. 3*t + 3), substring(dzArr, 3*d + 1 .. 3*d + 3));
end proc
TGDZToYear := proc(tgdz, bY)
local tg, dz, ti, di, m, tgArr, dzArr;
tgArr := "甲乙丙丁戊已庚辛壬癸";
dzArr := "子丑寅卯辰已午未申酉戌亥";
tg := substring(tgdz, 1 .. 3);
dz := substring(tgdz, 4 .. 6);
ti := 1/3*searchtext(tg, tgArr) - 1/3;
di := 1/3*searchtext(dz, dzArr) - 1/3;
m := ti - di;
if m < 0 then m := 12 + m; end if;
bY + 5*m + ti;
end proc
test:=proc(startY,endY)
local bYear,tgdz,year,i;
for i from startY to endY do
bYear:=getBaseYear(i);
tgdz:=YearToTGDZ(i);
year:=TGDZToYear(tgdz,bYear);
print(i," ",tgdz," ",bYear," ", year)
end do;
end proc
#在 Maple 工作表模式下测试通过.2025-6-1


浙公网安备 33010602011771号