JSFiddle - React, Tailwind, and code Playground
JavaScript
function isAtom(a) {
return typeof a === 'string' || typeof a === 'number' ||
typeof a === 'boolean';
}
function isNumber(a) {
return isFinite(a);
}
function isEqn(n, m) {
return !gt(n, m) && !lt(n, m);
}
function isZero(s) {
return s === 0;
}
function gt(n, m) {
return isZero(n) ? false :
isZero(m) ||
gt(sub1(n), sub1(m));
}
function sub1(n) {
return n - 1;
}
function isEq(s, t) {
return s === t;
}
function lt(n, m) {
return isZero(m) ? false :
isZero(n) ||
lt(sub1(n), sub1(m));
}
function isEqlist(l1, l2) {
return isNull(l1) && isNull(l2) ? true :
isNull(l1) || isNull(l2) ? false :
isAtom(car(l1)) && isAtom(car(l2)) ?
isEqan(car(l1), car(l2)) && isEqlist(cdr(l1), cdr(l2)) :
isAtom(car(l1)) || isAtom(car(l2)) ? false :
isEqlist(car(l1), car(l2)) && isEqlist(cdr(l1), cdr(l2));
}
function car(s) {
return s[0];
}
function cdr(s) {
return s[1];
}
function isNull(a) {
return typeof a === 'undefined' || (typeof a === 'object' && !a);
}
function isEqan(a1, a2) {
return isNumber(a1) && isNumber(a2) ? isEqn(a1, a2) :
isNumber(a1) || isNumber(a2) ? false :
isEq(a1, a2);
}
function isEqual(s1, s2) {
return isAtom(s1) && isAtom(s2) ? isEqan(s1, s2) :
isAtom(s1) || isAtom(s2) ? false :
isEqlist(s1, s2);
}
alert(isEqual([], []))