/***********************************************************************************/ /***********************************************************************************/ /** 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 , with categorization of arguments; ; causal/enablement information; eventually to include primitive ; act of which 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))))