When I looked at the code for diff and the documentation, it was not clear to me whether diff returns the original list or a copy of it when trying to subtract an empty list. I have a recursive function which tries to reuse tails as much as possible by newItem::origList but sometimes I need to filter the origList.
My code would be prettier if I could assume that diff returns the original list if its second argument is empty.
else {
val superTypes = lineage.filter(sup => t.subtypep(sup).contains(true))
if (superTypes.isEmpty)
extendPN(bdd, t :: lineage) // avoid allocating a new list
else
extendPN(bdd, t :: (lineage diff superTypes))
}
I could replace this with
else {
val superTypes = lineage.filter(sup => t.subtypep(sup).contains(true))
extendPN(bdd, t :: (lineage diff superTypes))
}
Of course I could write my own version, but isn’t this something that the standard library function should guarantee?