/***********************************************************************************/
/***********************************************************************************/
/**         REVISED CODE   REVISED CODE  REVISED CODE                             **/
/***********************************************************************************/
/***********************************************************************************/


(defun defn_verb (verb)
	(defn_bitrans verb)
	(defn_trans verb)	
	(defn_reflex verb)	
	(defn_intran verb)	
	)

;; If any one of the following is true, evaluate it.  The result is that the last
;; type chosen is the type reported.  I need a refresher on Lisp.
;; Possible design:  
;; Have lists for objects, agents, consequences, etc. for each verb category
;; (transitive, intransitive, bitransitive, reflexive).  Call a functions similar
;; to report_bitransitive for each instance of a verb that is used in the
;; bi-transitive sense.  Have it append to the lists for that category.
;;
;; At the end, return the results for each type of verb category.  
;; 
;; This is one way to avoid report_bitransitive lumping its results.

(defun defn_bitrans (verb)
     (setq czs (cause verb))
     (setq efs (car (effect verb)))
        (if #3! ((deduce property (build lex "bitransitive")
			object (build lex ~verb)))
	    (report_bitransitive verb czs efs)
	)
)
         

(defun defn_trans (verb)
     (setq czs (cause verb))
     (setq efs (car (effect verb)))
        (if #3! ((deduce property (build lex "transitive")
			object (build lex ~verb)))
	    (report_transitive verb czs efs)
	)
)          


(defun defn_reflex (verb)
     (setq czs (cause verb))
     (setq efs (car (effect verb)))
        (if #3! ((deduce property (build lex "reflexive")
			object (build lex ~verb)))
	    (report_reflexive verb czs efs)
	)
)          

(defun defn_intran (verb)
     (setq czs (cause verb))
     (setq efs (car (effect verb)))
	(if t (report_intransitive verb czs efs)
	)
)

/***********************************************************************************/
/***********************************************************************************/
/**         ORIGINAL CODE   ORIGINAL CODE  ORIGINAL CODE                          **/
/***********************************************************************************/
/***********************************************************************************/

;----------------------------------------------------------------------------
;
;	function: defn_verb
;	input:	a verb to be defined
;	output: predicate structure of <verb>, with categorization of arguments;
;		causal/enablement information; eventually to include primitive 
;		act of which <verb> is a type (if any).
;	calls:  report_bitransitive, or report_transitive, or report_reflexive,
;		or report_intransitve, as appropriate.
;	NOTE: #3! is a macro which allows snepsul commands to be invoked from
;	      within lisp functions; obviates need for references to pkgs, etc.
;------------------------------------------------------------------------------
(defun defn_verb (verb)
     (setq czs (cause verb))
     (setq efs (car (effect verb)))
     (cond (#3! ((deduce property (build lex "bitransitive")
			object (build lex ~verb)))
	    (report_bitransitive verb czs efs))
	   (#3! ((deduce property (build lex "transitive")
			object (build lex ~verb)))
	    (report_transitive verb czs efs))
	   (#3! ((deduce property (build lex "reflexive")
		 	object (build lex ~verb)))
	    (report_reflexive verb czs efs))
	   (t (report_intransitive verb czs efs))))










