public void Visit(LispList node) { var symbols = new List <string>(); foreach (var e in node.expressions) { if (NameOverlap) { return; } switch (e) { case LispDefine ld: NameOverlap = NameOverlap || symbols.Exists(s => s == ld.parameter.symbol); symbols.Add(ld.parameter.symbol); break; case LispLambda ll: NameOverlap = NameOverlap || symbols.Exists(s => s == ll.parameter.symbol); symbols.Add(ll.parameter.symbol); break; default: break; } e.Accept(this); } }
public void Visit(LispList node) { Console.Write("("); Console.Write(" "); foreach (LispExpression e in node.expressions) { e.Accept(this); Console.Write(" "); } Console.Write(")"); }