2020-05-28 Algebraic Data Types

2020-05-28  本文已影响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())+")";

Recap

上一篇 下一篇

猜你喜欢

热点阅读