From: Mike Speed
Subject: SMSPEC
Date: 
Message-ID: <1120883567.084285.283160@g14g2000cwa.googlegroups.com>
(DEFUN SMNG1 NIL

       ;;; SMNG1 IS CALLED AS SOON AS TJHE HEAD OF A NOUN GROUP IUS
       ;;PARSED.  IT FIRST BUILDS A SKELETON OSS CONTAINING ONLY THE
       ;;DETERMINERS AND ORDINALS.  IT THEN EVAL'S THE DICTIONARY
       ;;DEFINITION OF THE HEAD NOUN WHICH SHOULD BUILD OSS'S FOR
       ;;EACH POSSIBLE INTERPRETATION OF THE NOUN.  IT THEN CYCLES
       ;;THROUGH ALL THE GOODIES IN FROUNT OF THE HEAD NOUN, EVALING
       ;;THEIR DEFINITIONS.  THE FREE VARIABLE /"SM/" IS USED TO KEEP
       ;;THE LIST OF OSS'S DURING THIS ENTIRE PROCESS.  ; NOTE THE
       ;;SPECIAL HANDLING OF TPRONS (ANYTHING SOMETHING ETC.) AND OF
       ;;SUPERLATIVE AND COMPARATIVE ADJECTIVES.  ;
       (PROG (WORD-BEING-INTERPRETED DETERS)
	     (SETQ DETERS
		   (LIST (COND ((CQ NUMD)
				((LAMBDA (NUM)
					 (EVAL (SM (MOVE-PT H
							    PV
							    (NUMD)))))
				 (SM (MOVE-PT H PV (NUM)))))
			       ((CQ NUM) (SM (MOVE-PT H PV (NUM))))
			       ((CQ NPL)
				(COND ((ISQ NB BOTH) 2.)
				      ((CQ NS) 'SG-PL)
				      ('NPL)))
			       ('NS))
			 (COND ((CQ QNTFR)
				(EVAL (SM (MOVE-PT H PV (QNTFR)))))
			       ((CQ TPRON)
				(EVAL (SM (MOVE-PT H PV (TPRON)))))
			       ((CQ DEF) 'DEF)
			       ((CQ DET) 'INDEF)
			       ('NDET))
			 (COND ((CQ HOWMANY) 'HOWMANY)
			       ((CQ QDET) 'WHICH))))

	     ;;;
	     (SMSET (LIST (BUILD OSSNODE=
				 (MAKESYM 'OSS)
				 PARSENODE=
				 C
				 VARIABLE=
				 (MAKESYM 'X)
				 MARKERS=
				 (AND (CQ TPRON)
				      '(/#VAGUE /#PHYSOB /#THING))
				 RELATIONS=
				 (AND (CQ TPRON)
				      (LIST (LIST '/#PHYSOB
						  OSSNODE=)))
				 DETERMINER=
				 DETERS)))
								       ;BUILD AN INITIAL OSS
	     (SETQ WORD-BEING-INTERPRETED H)
								       ;SETUP TO LOOP THROUGH
	     (COND ((ISQ H TPRON) (GO LOOP))
								       ;ADJECTIVES IF ITS A TPRON,
		   ((CQ INCOM) (SMONE) (GO LOOP)))
								       ;ITS WAS EVALED ABOVE SO SKIP
	     (SMSET (EVAL (SM WORD-BEING-INTERPRETED)))
								       ;INCOMPLETES SUCH AS /"PICK UP
	LOOP (COND ((NULL SM) (RETURN NIL)))
								       ;TWO/" EVAL THE HEAD NOUN IF
	     (COND ((NULL (SETQ WORD-BEING-INTERPRETED
				(CDR WORD-BEING-INTERPRETED)))
								       ;AN ADJECTIVE ELIMINATES ANY
		    (RETURN SM))
								       ;POSSIBLE INTERPRETATION FOR
		   ((OR (ISQ WORD-BEING-INTERPRETED COMPAR)
								       ;THIS NG, FAIL IF WE'VE
			(ISQ WORD-BEING-INTERPRETED SUP))
								       ;LOOPED THRU ALL THE MODIFIERS,  THEN RETURN THE
		    (EVAL (FINDMEASURE WORD-BEING-INTERPRETED))
								       ;LIST OF POSSIBLE INTERPRETATIONS.  IF ITS A
		    (GO LOOP))
								       ;COMPARATIVE OR SUPERLATIVE
		   ((OR (ISQ WORD-BEING-INTERPRETED ADJ)
								       ;ADJECTIVE
			(ISQ WORD-BEING-INTERPRETED CLASF))
								       ; IF ITS AN ADJECTIVE OR
		    (SMADJ WORD-BEING-INTERPRETED)
								       ;CLASSIFIER THEN EVAL THE
		    (GO LOOP))
								       ;DICTIONARY DEFINITION OF IT
		   ((ISQ WORD-BEING-INTERPRETED POSS)
		    (SMPOSS)
		    (GO LOOP)))
	     (GO LOOP)))

;;;=============================================================

(DEFUN SMNG2 NIL
       ;; CALLED FROM NG WHEN ALL QUALIFIERS HAVE BEEN FOUND.
       ;;BASICALLY, IT SAVE THE NG ON THE BACKREF(ERENCE) LIST, AND
       ;;CALLS SMNG3 (ON EACH POSSIBLE NG INTERPRETATION) TO EVAL ANY
       ;;DEFINITE NOUN GROUPS EG.  /"THE RED BLOCK./" AS USUAL, THE
       ;;INITIAL OSS LIST IS IN /"SM/" AND THE FINAL OSS LIST IS PUT IN
       ;;/"SM/" ;
       (AND (NOT (CQ ANSNAME))
								       ; DON'T USE FAKEY ANSWER NAME
	    (GETR 'HEAD C)
								       ;NODES FOR REFERENCE  QUEST
	    DISCOURSE;NODES ARE NOT SUITABLE
	    (SETQ BACKREF (CONS (CAR C) BACKREF)))
								       ;REFERENTS SAVE THIS NG AWAY
       (SMSET (MAPBLAND (FUNCTION SMNG3) SM)))
								       ;FOR POSSIBLE LATER BACK REFERENCE  GO THRU ALL
		       ;THE POSSIBLE INTERPRETATIONS OF THIS NOUN GROUP

(DEFUN SMNG3 (OSS)
       ;; TAKES AN OSS AS ARGUMENT AND TRIES TO FIND ITS REFERENCE IF
       ;;THE NOUN GROUP IS DEFINITE.  EXCEXT FOR SPECIAL /"ONLY
       ;;DEFINITE/" DEFINITES SUCH AS /"THE RIGHT/" AND /"THE THING/"
       (PROG (FINDER MUNG INTER LIST CANDIDATES UNBOUND)
	     (COND ((NOT (EQ (QUANTIFIER? OSS) 'DEF))
		    (RETURN OSS))
								       ;IF ITS NOT DEFINITE OR IT
		   ((REFER? OSS) (RETURN OSS))
								       ;ALREADY HAS A REFERENT
		   ((CQ ANSNAME) (RETURN OSS)))
								       ;MARKED,  IF ITS KLUDGY
	     (SETQ
	      FINDER
	      (PLNR-FINDIFY 'ALL
								       ;ANSWER NAME, JUST RETURN IT
			    (VARIABLE? OSS)
								       ;JUST RETURN IT
			    (LIST (VARIABLE? OSS))
			    (PLNR-DESCRIBE (RELATIONS? OSS)
					   (VARIABLE? OSS)
					   (LIST (VARIABLE? OSS)))))
								       ; BUILDS UP THFIND EXPRESSION
	     (PUTPROP OSS FINDER 'PLNRCODE=)
	     (SETQ WHO NIL)
	UP   (COND ((NOT (SETQ CANDIDATES (THVAL2 WHO FINDER)))
		    (GO TOOFEW))
		   ((NUMBERP (NUMBER? OSS))
		    (COND ((LESSP (LENGTH CANDIDATES) (NUMBER? OSS))
			   (GO TOOFEW))
			  ((GREATERP (LENGTH CANDIDATES)
				     (NUMBER? OSS))
			   (GO TOOMANY))))
		   ((EQ (NUMBER? OSS) 'NS)
		    (COND ((NULL CANDIDATES) (GO TOOFEW))
			  ((CDR CANDIDATES) (GO TOOMANY))))
		   ((MEMQ (NUMBER? OSS) '(NPL SG-PL)))
		   ((ERT SMNG3= SCREWY NUMBER PROPERTY OF OSS)))

	     ;;;
	     (PUTPROP OSS CANDIDATES 'REFER=)
	DONE (RETURN OSS)

	     ;;;
	TOOFEW       ; WE DIDN'T FIND ANY (OR
	     (COND ((OR (NULL DISCOURSE) (NULL WHO))
								       ;ENOUGH) REFERENTS FOR THE NG
		    (SETQ GLOBAL-MESSAGE (APPEND '(I DON/'T
						     KNOW
						     WHAT
						     YOU
						     MEAN
						     BY
						     /")
						 (FROM NB N)
						 '(/"/.)))
		    (RETURN NIL))
								       ;IF WE AREN'T REMEMBERING
		   ((MEMQ WHO '(HE NIL))
								       ;SENTENCES, FORGET IT IF WE JUST TRIED TO FIND
		    (SETQ GLOBAL-MESSAGE (APPEND '(I DON/'T
						     KNOW
						     WHICH)
								       ;EVERYTHING (OR EVERYTHING
						 (CDR (FROM NB N))
								       ;THAT /"HE/" KNOWS ABOUT)
						 '(YOU MEAN/.)))
								       ;THEN FAIL
		    (RETURN NIL)))
	     (SETQ MUNG T)
								       ; ELSE SET UP TO EXPAND THE
	TOOMANY      ;SENTENCES WE'RE LOOKING AT
	     (AND (MEMQ WHO '(HE NIL))
		  (SETQ FINDER (PLNR-MUNG FINDER CANDIDATES)))
								       ;RESTRICT THE POSSIBLE
	     (SETQ WHO
		   (COND ((EQ WHO NIL) 'HE)
								       ;REFERENTS TO BE AMUNG THE
			 ((EQ WHO 'HE)
								       ;LIST ALREADY FOUND
			  (LIST (SUB1 LASTSENTNO) (ADD1 LASTSENTNO)))
			 ((OR (NOT MUNG) (EQ (CAR WHO) 1.))
			  (SETQ WHO 'HE)
			  (GO TOOFEW))
			 ((CONS (SUB1 (CAR WHO)) (CDR WHO)))))
	     (SETQ MUNG NIL)
	     (GO UP)))

(DEFUN SMONE NIL
       (PROG (CONTRAST X)
	     (SETQ X H)
								       ; SET  X TO DAUGHTERS OF
	GO   (COND ((SETQ CONTRAST (GET (ROOT (NB X))
					'CONTRAST))
								       ;CURRENT NODE
		    (SETQ CONTRAST (LIST CONTRAST (ROOT (NB X)))))
		   ((SETQ X (CDR X)) (GO GO)))
	UP   (OR (AND (MOVE-PT C U U (NG)) (SMONE2 (LIST (CAR PT))))
		 (SMONE2 (PARSENODE? LASTREL))
		 (SMONE2 BACKREF)
		 (SMONE2 ANSNAME)
		 (SMONE2 BACKREF2)
		 (COND (CONTRAST (SETQ CONTRAST NIL) (GO UP)))
		 (AND (MOVE-PT LASTSENT DLC PV (NG))
		      (SMONE2 (LIST (CAR PT))))
		 (ERT SMONE= CAN/'T FIND REFERENT FOR /"ONE/"))
	     (RETURN SM)))

(DEFUN SMONE2 (X)
       ;; SMONE2 TAKES IN A LIST OF NOUN GROUP NODES AND TRIES TO SEE
       ;;IF ANY OF THOSE NOUN GROUPS COULD BE THE REFERENT FOR /"ONE/".
       (PROG (WORD-BEING-INTERPRETED)
	UP   (COND ((NULL X) (RETURN NIL))
								       ;IF X IS EMPTY, FAIL
		   ((SETQ WORD-BEING-INTERPRETED (SMONE3 X)))
								       ;TRY TO SEE IF FIRST NG OF X
		   (ELSE (SETQ X (CDR X)) (GO UP)))
								       ;SATIFIES CONTRAST AND/OR COULD BE REFERENT
		       ;ELSE TRY NEXT NG IN X
	     ;; AT THIS POINT WORD-BEING-INTERPRETED IS (SHOULD BE) A
	     ;;LIST A WORD NODES OF THE NG WHICH IS THE REFERENT FOR
	     ;;/"ONE/" WE NOW PROCEED TO BUILD UP AN OSS FOR THE /"ONE/"
	     ;;NG THE LIST IS IN ORDER(NOUN ADJ ...  ADJ ETC NUM DET)
	     ;;ONLY THE NOUN AND THE ADJ'S ARE USED
	     (OR (ISQ WORD-BEING-INTERPRETED NOUN)
		 (BUG SMONE2: REFERENT OF /"ONE/" IS SCREWED UP))
	     (EVAL (SM WORD-BEING-INTERPRETED))
								       ; EVAL THE NOUN DEFINITION
	GO   (AND
	      (SETQ WORD-BEING-INTERPRETED
		    (CDR WORD-BEING-INTERPRETED))
	      (ISQ WORD-BEING-INTERPRETED ADJ)
								       ; IF WE REACHED END OF
	      (EVAL (SM WORD-BEING-INTERPRETED))
								       ;ADJECTIVES, STOP
	      (GO GO))
	     (RETURN SM)))

(DEFUN SMONE3 (ONENG)
       ;; SMONE3 TAKES AN NG WHICH IS A POSSIBLE REFERENT FOR /"ONE/".
       ;;IT FIRST CUTS THE NG TO BE ONLY (NOUN ADJ ...  ADJ ETC) I.E.
       ;;IT STRIPS OF QUALIFYING PHRASES.  IF THERE IS NO CONTRAST
       ;;THEN THIS MUNGED NG IS RETURNED AS THE REFERENT.  IF THERE
       ;;IS A CONTRASTIT CHECKS T SEE IF THE NG SATISFIES
       ;;THAT CONTRAST.
       (PROG (NGWORDS X)
	     (OR (ISQ ONENG NG)
		 (BUG SMONE3: ONE REFERENT IS NOT A NG))
	     (SETQ NGWORDS (H ONENG))
	LOOP (COND ((NULL NGWORDS) (RETURN NIL))
								       
		 


--end--