code: function quasiquoter(forms) {
      if(sl.isAtom(forms)) {
        return sl.list("quote", forms);
      }
      else if(sl.isList(forms) && forms.length === 0) {
        return forms;
      }
      else if(forms[0].value === 'unquote') {
        return forms[1];
      }
      else if(sl.isList(forms) && forms.length === 1) {
        return quasiquoter(forms[0]);
      }
      else if(sl.isList(forms[0]) && forms[0][0].value === "splice-unquote") {
        return sl.list("concat",
                forms[0][1],
                quasiquoter(forms.slice(1)));
      }
      else {
        return new sl.list("cons",
                quasiquoter(forms[0]),
                quasiquoter(forms.slice(1)));
      }
  }
docs: this is called initially with the expr *following* "quasiquote" then it recurses over the parsed forms note: this code was based on MAL see e.g.: https://github.com/kanaka/mal/blob/master/process/guide.md and https://raw.githubusercontent.com/kanaka/mal/master/js/stepA_mal.js /* FROM MAL (DELETE)
  OLD
  if (!is_pair(ast)) {
  return [types._symbol("quote"), ast];
  } else if (ast[0].value === 'unquote') {
  return ast[1];
  } else if (is_pair(ast[0]) && ast[0][0].value === 'splice-unquote') {
  return [types._symbol("concat"),
  ast[0][1],
  quasiquote(ast.slice(1))];
  } else {
  return [types._symbol("cons"),
  quasiquote(ast[0]),
  quasiquote(ast.slice(1))];
  }