in kernel/tree.hpp [123:154]
template<typename T> inline const list<T> treeSelectAssoc(const list<T>& k, const list<T>& lv) noexcept {
if (isNull(k) || isNull(lv))
return list<T>();
// If list is an assoc and matches, select it
if (isAssoc(lv)) {
if (car<T>(lv) == car(k) && isNull(cdr(k)))
return mklist<T>(lv);
}
// 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 treeSelectAssoc<T>(k, cdr(lv));
return append<T>(treeSelectAssoc<T>(k, a), treeSelectAssoc<T>(k, cdr(lv)));
}
// If we found a match, select it and lookup children and rest of the list
if (car<T>(a) == car(k)) {
if (isNull(cdr(k)))
return cons<T>(a, treeSelectAssoc<T>(k, cdr(lv)));
return append<T>(treeSelectAssoc<T>(cdr(k), cdr<T>(a)), treeSelectAssoc<T>(k, cdr(lv)));
}
// No match, lookup children and rest of the list
if (isNull(cdr<T>(a)))
return treeSelectAssoc<T>(k, cdr(lv));
if (!isList(cadr<T>(a)))
return append<T>(treeSelectAssoc<T>(k, cddr<T>(a)), treeSelectAssoc<T>(k, cdr(lv)));
return append<T>(append<T>(treeSelectAssoc<T>(k, cadr<T>(a)), treeSelectAssoc<T>(k, cddr<T>(a))), treeSelectAssoc<T>(k, cdr(lv)));
}