[Turn off line numbering]1: arg trie, key; 2: var n, t1; 3: 4: if (trie[1] && key == trie[1][1]) { 5: trie = trie.replace(1, 0); 6: if (trie.length() == 3 && !trie[3][2]) 7: trie = [trie[3][1].replace(1, trie[2] + trie[3][1][1]), ""]; 8: return trie; 9: } 10: if (!key) 11: throw(~ambig, "Trie: Can't delete more than one key."); 12: if (!(n = key[1] in trie[2])) 13: throw(~keynf, "Trie: No such key."); 14: t1 = (> ._del(trie[n + 2], key.subrange(2)) <); 15: if (t1 == [0, ""]) 16: trie = trie.delete(n + 2).replace(2, trie[2].subrange(1, n - 1) + trie[2].subrange(n + 1)); 17: else 18: trie = trie.replace(n + 2, t1); 19: if (trie.length() == 3 && !trie[1] && !trie[3][2]) 20: trie = [trie[3][1].replace(1, trie[2] + trie[3][1][1]), ""]; 21: return trie;
// Miroslav Silovic
// Created 10-May-1995 as a part of ColdCore, see: @help Credit