コード例 #1
0
ファイル: parser.cpp プロジェクト: ghalib/scheme
// Would be nice to make this a virtual member function, but it's
// awkward with the recursion for list printing.
std::ostream& print(std::ostream& os, const ElemPtr& e, bool first=true)
{
  SymbolPtr sym = to_symbol(e);
  NumberPtr num = to_number(e);
  if (sym)
    {
      os << sym->value();
    }
  else if (num)
    {
      os << num->value();
    }
  else
    {
      PairPtr p = to_cons(e);
      if (p)
	{
	  if (first)
	    os << "(";
	  if (is_nil(p))
	    os << ")";
	  else
	    {
	      if (!(to_symbol(p->car())))
		os << "(";
	      print(os, p->car(), false);
	      if (!(is_nil(to_cons(p->cdr()))))
		os << " ";
	      print(os, p->cdr(), false);
	    }
	}
    }
  return os;
}
コード例 #2
0
ファイル: parser.cpp プロジェクト: ghalib/scheme
bool is_nil(const PairPtr& p)
{
  return ((!(p->car())) && (!(p->cdr())));
}