Entry tags:
on the verge of introducing Y-combinator
isAncestor = function(ancestor) { var check = function(descendant) { var p = descendant && descendant.parentNode return ancestor === p || !!(p && check(p)) }; return check }
isAncestor = function(ancestor) { var check = function(descendant) { var p = descendant && descendant.parentNode return ancestor === p || !!(p && check(p)) }; return check }
scala> abstract class N[T] defined class N scala> case class L[T](v:T) extends N[T] defined class L scala> case class B[T](kids:List[N[T]]) extends N[T] defined class B scala> val t = B(List(B(List(L("ab"),L("cd"),B(List(L("xy"),L("z"))))),L("middle"))) t: B[java.lang.String] = B(List(B(List(L(ab), L(cd), B(List(L(xy), L(z))))), L(middle))) scala> def scan[T](tree:N[T]):List[T] = tree match { case L(v) => List(v); case B(kids) => kids flatMap (scan(_)) } scan: [T](N[T])List[T] scala> scan(t) res17: List[java.lang.String] = List(ab, cd, xy, z, middle) scala>