:abstractobject :name :names :parent :children :flags\r
:initflags :add-flags :has :hasnt :-> :give :child\r
:ifclass :object :defaction :*meta*\r
- :move :rmv :ofclass :among\r
+ :move :rmv :ofclass :among :below\r
:verb :extend-verb :extend-verb-first\r
:extend-verb-only :extend-verb-only-first\r
:deftoken :string== :matchp :!last!\r
(defun notin (obj &rest what)\r
"Test whether the object is not in any of other arguments"\r
(notany (lambda (x) (eql (parent obj) x)) what))\r
- \r
+\r
+(defun below (obj1 obj2)\r
+ "Tests whether obj1 is strictly below obj2 in object structure"\r
+ (loop for x = obj1 then (parent x)\r
+ while x\r
+ when (eql x obj2) do (return t)\r
+ finally (return nil)))\r
+\r
;;SECTION 9: Verb functions\r
\r
(defstruct patternlist value)\r