2020-05-28 Algebraic Data Types
2020-05-28 本文已影响0人
苦庭
My answer / AC
function natToInt(nat){
return nat===zero ? 0 : 1+natToInt(nat());
}
function intToNat(int) {
if(int===0) return zero;
return succ(intToNat(int-1));
}
function add(nat1, nat2) {
if(nat1===zero) return nat2;
return add(nat1(), succ(nat2));
}
function mul(nat1, nat2) {
if(nat1===zero) return zero;
return add(nat2, mul(nat1(), nat2));
}
function compareTo (nat1, nat2) {
if(natToInt(nat1) > natToInt(nat2)) return 1;
else if(natToInt(nat1) < natToInt(nat2)) return -1;
return 0;
}
function toString(nat) {
if(nat===zero) return "zero";
return "succ("+toString(nat())+")";
- 一开始老说我
RangeError
后来发现是不能够在natToInt(nat, acc=1)
里面加上后面那个acc=1,我也不知道为什么,反正内存就因为这个爆了,可能是这个累加器会占很多的位置吧。 - 很好的递归训练题,可惜已经被弃置了
Recap
- 多练习递归的算法思想!