in kernel/tree.hpp [42:78]
template<typename T> inline const list<T> treeDelAssoc(const list<T>& k, const list<T>& l) noexcept {
if (isNull(k) || isNull(l))
return l;
const list<T> lv = l;
// If list is an assoc and matches, skip it
if (isAssoc(lv)) {
if (car<T>(lv) == car(k) && isNull(cdr(k)))
return list<T>();
}
// If list element is not an assoc, lookup children and rest of the list
const T a = car(lv);
if (!isAssoc(a)) {
if (!isList(a))
return cons<T>(a, treeDelAssoc<T>(k, cdr(lv)));
const list<T> da = treeDelAssoc<T>(k, a);
return isNull(da)? treeDelAssoc<T>(k, cdr(lv)) : cons<T>(da, treeDelAssoc<T>(k, cdr(lv)));
}
// If we found a match, skip it and lookup children and rest of the list
if (car<T>(a) == car(k)) {
if (isNull(cdr(k)))
return treeDelAssoc<T>(k, cdr(lv));
return cons<T>(cons<T>(car<T>(a), treeDelAssoc<T>(cdr(k), cdr<T>(a))), treeDelAssoc<T>(k, cdr(lv)));
}
// No match, lookup children and rest of the list
if (isNull(cdr<T>(a)))
return cons<T>(a, treeDelAssoc<T>(k, cdr(lv)));
if (!isList(cadr<T>(a)))
return cons<T>(cons<T>(car<T>(a), cons<T>(cadr<T>(a), treeDelAssoc<T>(k, cddr<T>(a)))), treeDelAssoc<T>(k, cdr(lv)));
const list<T> da = treeDelAssoc<T>(k, cadr<T>(a));
if (isNull(da))
return cons<T>(cons<T>(car<T>(a), treeDelAssoc<T>(k, cddr<T>(a))), treeDelAssoc<T>(k, cdr(lv)));
return cons<T>(cons<T>(car<T>(a), cons<T>(da, treeDelAssoc<T>(k, cddr<T>(a)))), treeDelAssoc<T>(k, cdr(lv)));
}