procedure eq(x,y) local i if x === y then return y # succeed if identical if type(x) == type(y) == "list" then { if *x ~= *y then fail # check sizes every i := 1 to *x do # check subtrees if not eq(x[i],y[i]) then fail return y } end