ket fn: extract-category

        extract-category ket
        extract the "category" from the given ket
        categories are separated by ": "
        with the most general category on the left, and the most specific on the right
        for example |animal: mammal: dog>
        has the most general category "animal", then the category "mammal" and then finally the "value" dog
        categories can be considered a type for the object
        Eg, |word: house> says house is a type of word
        and |food: apple> says apple is a type of food
        and we can define operators with respect to them
        Eg, op |food: *> #=> ...
        will define "op" with respect to all objects of type\category "food".

        -- if there is no category, then return the empty ket:
        -- NB: this is in contrast to the python version of the Semantic DB which would instead return |dog>
        extract-category |dog>

        -- remove the "value" from the ket:
        -- in other words, extract the category of the ket
        extract-category |animal: mammal: dog>
            |animal: mammal>

        -- remove the "value" from the ket, and then the most specific "category":
        extract-category extract-category |animal: mammal: dog>

        -- or using the powered-operator notation:
        extract-category^2 |animal: mammal: dog>

        -- an abstract example:
        extract-category |a: b: c: d: e: f>
            |a: b: c: d: e>

    see also:
        extract-value, extract-head, extract-tail