美文网首页
2020-05-28 Algebraic Data Types

2020-05-28 Algebraic Data Types

作者: 苦庭 | 来源:发表于2020-05-28 18:17 被阅读0次

https://www.codewars.com/kata/546d245dddbcbd291c00106e

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

  • 多练习递归的算法思想!

相关文章

网友评论

      本文标题:2020-05-28 Algebraic Data Types

      本文链接:https://www.haomeiwen.com/subject/fvnaahtx.html