From: Mike Speed
Subject: I can't find which line is causing the error
Date: 
Message-ID: <1119915827.071041.22580@g44g2000cwa.googlegroups.com>
In this code snippit:


(declare (genprefix morpho))

(DEFUN ETAOIN NIL
       (PROG (WORD NEWWORD CHAR ALTN ALREADY-BLGING-NEWWRD WRD LAST
              NEXT Y WORD1 X RD POSS)
        THRU (SETQ SENT (SETQ WORD (SETQ PUNCT (SETQ POSS NIL))))
             (PRINT 'READY)
             (TERPRI)
             (AND MOBYREAD (IOC Q))
        CHAR (COND ((EQUAL (TYIPEEK) 24.) (READCH) (ERT) (GO THRU))
                   ((= (tyipeek) 3.)
(or (and mobyread (end-of-file-condition))
    (bug etaoin: about to read eof)) )
)
             (setq char (cond ((greaterp 123. (setq char (tyi)) 96.) (-
char 32.))
                              ((greaterp 91. char 64.) char)
                              (t char))
                   char (ascii char)

                   )
             (cond ((EQ char '/ ) (GO WORD))           ;DELIMITER
                   ((MEMQ CHAR ALTMODE)
                    (setq char (ascii (uppercase-ify-char (tyi))) )
                    (COND ((MEMQ char ALTMODE)
                           (ERT)
                           (GO THRU))

                          ((EQ CHAR 'C) (TYO 12.) (GO DO))

                          ((EQ CHAR 'R) (TERPRI) (GO DO))

I get this error:

READING MORPHO
;(READ-EOF #FILE-IN-|DSK:SHRDLU;MORPHO FN2|-70774) END OF FILE WITHIN
READ

;BKPT FAIL-ACT


I've torn the code apart and can't find an end of file.

From: Barry Margolin
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <barmar-53827C.20153127062005@comcast.dca.giganews.com>
In article <·······················@g44g2000cwa.googlegroups.com>,
 "Mike Speed" <·······@yahoo.com> wrote:

> I get this error:
> 
> READING MORPHO
> ;(READ-EOF #FILE-IN-|DSK:SHRDLU;MORPHO FN2|-70774) END OF FILE WITHIN
> READ
> 
> ;BKPT FAIL-ACT
> 
> 
> I've torn the code apart and can't find an end of file.

This means your parentheses aren't balanced -- you have more open 
parentheses than close parentheses.

-- 
Barry Margolin, ······@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
From: Mike Speed
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <1119956139.324592.323400@z14g2000cwz.googlegroups.com>
No - I checked for that.
From: Kent M Pitman
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <uhdfilets.fsf@nhplace.com>
"Mike Speed" <·······@yahoo.com> writes:

> No - I checked for that.

Well, the code you pasted to the newsgroup WAS missing parens.
From: Mike Speed
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <1119972193.256037.30520@o13g2000cwo.googlegroups.com>
Okay:


(declare (genprefix morpho))


;;;********************************************************************************
;;;
;;;               MORPHO  - code for morphological analysis
;;;
;;;           includes ETAOIN, the input handler for the system
;;;
;;;********************************************************************************


(DEFUN ETAOIN NIL
       (PROG (WORD NEWWORD CHAR ALTN ALREADY-BLGING-NEWWRD WRD LAST
	      NEXT Y WORD1 X RD POSS)
	THRU (SETQ SENT (SETQ WORD (SETQ PUNCT (SETQ POSS NIL))))
	     (PRINT 'READY)
	     (TERPRI)
	     (AND MOBYREAD (IOC Q))
	CHAR (COND ((EQUAL (TYIPEEK) 24.) (READCH) (ERT) (GO THRU)); "cntrl-x"
break
;left over from CMU
                   ((= (tyipeek) 3.)
(or (and mobyread (end-of-file-condition))
    (bug etaoin: about to read eof)) )
)
	     (setq char (cond ((greaterp 123. (setq char (tyi)) 96.) (- char
32.))
			      ((greaterp 91. char 64.) char)
			      (t char))
   	           char (ascii char)
                   ;;this little hack maps all lowercase letters into
uppercase.
		   ;;a more reasonable thing to do would be to hack the chtrans
		   ;;property of the current readtable, but this was quicker to
		   ;;patch.
                   )
    	     (cond ((EQ char '/ ) (GO WORD))           ;DELIMITER
		   ((MEMQ CHAR ALTMODE)
		    (setq char (ascii (uppercase-ify-char (tyi))) )
		    (COND ((MEMQ char ALTMODE)
			   (ERT)
			   (GO THRU))
								       ;ALTMODE-ALTMODE
			  ((EQ CHAR 'C) (TYO 12.) (GO DO))
								       ;ALTMODE-C
			  ((EQ CHAR 'R) (TERPRI) (GO DO))
								       ;ALTMODE-R
			  ((AND (EQ CHAR 'S) SAVESENT)
								       ;ALTMODE-S CAUSES THE LAST SENTENCE TYPED IN TO
			   (SETQ SENT (CAR SAVESENT))
								       ;RETURNED AS THE SENTENCE TO BE INTERPRETED
			   (SETQ PUNCT (CDR SAVESENT))
			   (%)
			   (RETURN SENT))
			  ((EQ CHAR 'N)
			   (SETQ NEWWORD (NOT NEWWORD)
				 ALTN (NOT ALTN))
			   (GO CHAR))
								       ;ALTMODE-N COMPLEMENTS THE NEWWORD FLAG, WHICH
			  ((EQ CHAR 'Q)
								       ;DETERMINES WHETHER UNRECOGNIZED WORDS WILL BE
			   (IOC Q)
								       ;CONSIDERED SPELLING ERRORS OR NEW WORDS.
			   (SETQ IGNORE NIL)
			   (GO THRU))
								       ;ALTMODE-Q CAUSES READIN FROM DISK FILE.
			  ((EQ CHAR 'M)
			   (IOC Q)
			   (SETQ IGNORE NIL MOBYREAD T)
			   (GO thru))
			  ((EQ CHAR 'I)
			   (SETQ IGNORE T)
			   (IOC Q)
			   (GO THRU))
								       ;ALTMODE-I IGNORES SENTENCE READ FROM FILE.
			  ((GO THRU))))
		   ((EQ CHAR RUBOUT)
		    (COND (WORD (PRINC (CAR WORD))
				(SETQ WORD (CDR WORD)))
			  (SENT (PRINT (CAR SENT))
				(SETQ SENT (CDR SENT))))
		    (GO CHAR))
		   ((EQ CHAR CARRET) (GO WORD))
		   ((MEMQ CHAR PUNCL)
		    (SETQ PUNCT CHAR)
								       ;DELIMITER
		    (AND WORD (GO WORD))
		    (GO PUNC)))
	     (AND
	      (OR (AND (EQ CHAR '")
		       (NOT ALREADY-BLGING-NEWRD)
		       (SETQ NEWWORD (SETQ ALREADY-BLGING-NEWRD T))
		       (GO CHAR))
		  (AND (EQ CHAR '")
		       ALREaDY-BLGING-NEWRD
		       (NOT (SETQ ALREADY-BLGING-NEWRD NIL))
		       (GO WORD))
								       ;WITHIN THIS "AND" ARE ALL THE CHARACTERS THAT
		  (NUMBERP CHAR)
								       ;ARE UNDERSTOOD BY THE SYSTEM
		  (AND (EQ CHAR '=) (NULL WORD))
		  (MEMQ CHAR VOWEL)
		  (MEMQ CHAR CONSO))
	      (SETQ WORD (CONS CHAR WORD)))
	     (GO CHAR)
	DO   (PRINT 'READY)
	     (TERPRI)
	     (MAPC (FUNCTION (LAMBDA (X) (PRINT2 X))) (REVERSE SENT))
	     (PRINC '/ )
	     (MAPC (FUNCTION PRINC) (REVERSE WORD))
	     (GO CHAR)
	WORD (COND ((NULL WORD) (GO CHAR))
		   ((EQUAL WORD '(P L E H)) (HELP) (GO THRU))
		   ((AND (SETQ WRD (ERRSET (READLIST (REVERSE WORD))))
			 (NUMBERP (SETQ WRD (CAR WRD))))
		    (SETQ SENT (CONS WRD SENT))
		    (BUILDWORD WRD
			       (OR (AND (ZEROP (SUB1 WRD))
					'(NUM NS))
				   '(NUM))
			       (LIST 'NUM WRD)
			       NIL))
								       ;NO ROOT FOR NUMBERS
		   ((NULL WRD) (SETQ WRD (REVERSE WORD)) (GO NO))
		   ((GET WRD 'FEATURES))
								       ;IF A WORD HAS FEATURES, IT'S PROPERTIES
		   ((SETQ X (GET WRD 'IRREGULAR))
								       ;ARE ALL SET UP IN THE DICTIONARY
		    (BUILDWORD WRD
			       (MOD (GET (CAR X) 'FEATURES)
				    (CDR X))
			       (SM X)
			       (CAR X)))
		   ((EQ (CAR (LAST WORD)) '=)
		    (BUILDWORD WRD
			       (COND ((MEMQ '" WORD)
				      '(PROPN NS POSS))
				     ('(PROPN NS)))
			       '((PROPN T))
			       NIL))
		   ((GO CUT)))
	     (GO WRD)

	     ;;;---------------------------------------------
	     ;;;              MORPHOLOGY CODE
	     ;;;--------------------------------------------
	CUT  (COND ((STA WORD '(T " N))
		    (SETQ RD (CDDDR WORD))
		    (SETQ WORD (CONS '* WORD))
		    (GO TRY))
		   ((STA WORD '(S "))
		    (SETQ WORD (CDDR WORD))
		    (SETQ POSS WRD)
		    (GO WORD))
		   ((STA WORD '("))
		    (SETQ WORD (CDR WORD))
		    (SETQ POSS WRD)
		    (GO WORD))
		   ((STA WORD '(Y L))
		    (SETQ RD (CDDR WORD))
		    (GO LY))
		   ((STA WORD '(G N I)) (SETQ RD (CDDDR WORD)))
		   ((STA WORD '(D E)) (SETQ RD (CDDR WORD)))
		   ((STA WORD '(N E)) (SETQ RD (CDDR WORD)))
		   ((STA WORD '(R E)) (SETQ RD (CDDR WORD)))
		   ((STA WORD '(T S E)) (SETQ RD (CDDDR WORD)))
		   ((STA WORD '(S))
		    (SETQ RD (CDR WORD))
		    (GO SIB))
		   (T (GO NO)))
	     (SETQ LAST (CAR RD))
	     (SETQ NEXT (CADR RD))
	     (COND ((AND (MEMQ LAST CONSO)
			 (NOT (MEMQ LAST LIQUID))
			 (EQ LAST NEXT))
		    (SETQ RD (CDR RD)))
		   ((EQ LAST 'I)
		    (SETQ RD (CONS 'Y (CDR RD))))
		   ((OR (AND (MEMQ LAST CONSO)
			     (MEMQ NEXT VOWEL)
			     (NOT (EQ NEXT 'E))
			     (MEMQ (CADDR RD) CONSO))
			(AND (MEMQ LAST LIQUID)
			     (MEMQ NEXT CONSO)
			     (NOT (MEMQ NEXT LIQUID)))
			(AND (EQ LAST 'H) (EQ NEXT 'T))
			(AND (MEMQ LAST '(C G S J V Z))
			     (OR (MEMQ NEXT LIQUID)
				 (AND (MEMQ NEXT VOWEL)
				      (MEMQ (CADDR RD) VOWEL)))))
		    (SETQ RD (CONS 'E RD))))
	     (GO TRY)
	LY   (COND ((AND (MEMQ (CAR RD) VOWEL)
			 (NOT (EQ (CAR RD) 'E))
			 (MEMQ (CADR RD) CONSO))
		    (SETQ RD (CONS 'E RD))))
	     (COND ((MEMQ 'ADJ
			  (GET (SETQ ROOT (READLIST (REVERSE RD)))
			       'FEATURES))
		    (BUILDWORD WRD
			       '(ADV VBAD)
			       NIL
								       ;TEMP NIL SEMANTICS
			       ROOT)
								       ;ROOT IS THE ADJECTIVE
		    (GO WRD)))
	     (GO NO)
	SIB  (SETQ LAST (CAR RD))
	     (SETQ NEXT (CADR RD))
	     (COND ((NOT (EQ LAST 'E)))
		   ((EQ NEXT 'I)
		    (SETQ RD (CONS 'Y (CDDR RD))))
		   ((EQ NEXT 'X) (SETQ RD (CDR RD)))
		   ((AND (EQ NEXT 'H)
			 (NOT (EQ (CADDR RD) 'T)))
		    (SETQ RD (CDR RD)))
		   ((AND (MEMQ NEXT '(S Z))
			 (EQ NEXT (CADDR RD)))
		    (SETQ RD (CDDR RD))))
	TRY  (COND
	      ((OR
		(SETQ FEATURES
		      (GET (SETQ ROOT (READLIST (REVERSE RD)))
			   'FEATURES))
		(AND (SETQ X (GET ROOT 'IRREGULAR))
		     (SETQ FEATURES
			   (MOD (GET (SETQ ROOT (CAR X))
				     'FEATURES)
				(CDR X)))))
	       (BUILDWORD WRD
			  (MOD FEATURES (GET (CAR WORD) 'MOD))
			  (GET ROOT 'SEMANTICS)
			  ROOT))
	      ((EQ (CAR RD) 'E) (SETQ RD (CDR RD)) (GO TRY))
	      ((GO NO)))

	     ;;;----------------------------------------------------
	     ;;;  BUILD UP THE PROCESSED LIST OF WORDS TO BE RETURNED
	     ;;;----------------------------------------------------
	WRD  (SETQ
	      SENT
	      (COND (POSS (COND ((OR (MEMQ 'NOUN
					   (SETQ FEATURES
						 (GET WRD
						      'FEATURES)))
								       ;IF IT'S A NOUN
				     (MEMQ 'PROPN FEATURES))
								       ;OR A PROPER NOUN
				 (BUILDWORD POSS
					    (APPEND (MEET FEATURES
								       ;MARK IT AS POSSESSIVE
							  (GET 'POSS
							       'ELIM))
						    '(POSS))
					    (GET WRD
						 'SEMANTICS)
					    ROOT)
				 (CONS POSS SENT))
				((BUILDWORD '"S
								       ; CAN WE GENERALIZE IT???
					    '(VB BE V3PS PRES)
					    (GET 'BE
						 'SEMANTICS)
					    'BE)
				 (CONS '"S (CONS WRD SENT)))))
		    ((CONS WRD SENT))))
	PUNC (COND
	      (PUNCT (COND ((AND (EQ PUNCT '?) (NULL SENT))
			    (HELP)
			    (GO THRU))
			   ((MEMQ PUNCT FINAL)
			    (RETURN (CAR (SETQ SAVESENT
					       (CONS (REVERSE SENT)
								       ;RETURN POINT !!!!!!!!!!!!!
						     PUNCT)))))
			   ((SETQ SENT (CONS PUNCT SENT))))))
	     (SETQ PUNCT NIL)
	     (SETQ WORD (SETQ POSS NIL))
	     (GO CHAR)
	NO   (COND (NEWWORD (BUILDWORD WRD
				       '(NOUN NS)
				       '((NOUN (SMNEWNOUN))
					 (PROPN (SMNEWPROPN)))
				       WRD)
			    (OR ALTN (SETQ NEWWORD NIL))
			    (GO PUNC)))
	     (TERPRI)
	     (SAY *SORRY I DON/'T KNOW THE WORD ")
	     (PRINC WRD)
	     (PRINC '/ "/.)
	     (TERPRI)
	     (SAY PLEASE TYPE <LF> AND CONTINUE THE SENTENCE/.)
	NOGO (OR (EQUAL (TYI) 10.) (GO NOGO))
	     (SETQ PUNCT NIL WORD NIL)
	     (GO DO)))

(DEFUN PROPNAME (X) (EQ (CAR (EXPLODE X)) '=))

(DEFUN BCWL FEXPR (A)
								       ;DEFINES COMBINATIONS OF WORDS
       (MAPC
	'(LAMBDA (X)
	  (MAPC
	   '(LAMBDA (Y)
	     (BUILDWORD
	      (INTERN (MAKNAM (NCONC (EXPLODE (CAR X))
				     (CONS '-
					   (EXPLODE (CAR Y))))))
	      (CONS 'COMBINATION (CADR Y))
	      (CADDR Y)
	      (LIST (CAR X) (CAR Y))))
	   (CDR X)))
	A)
       T)

(DEFUN BUILDWORD (WORD FEATURES SEMANTICS ROOT)
       (PUTPROP WORD FEATURES 'FEATURES)
       (PUTPROP WORD (OR SMN SEMANTICS) 'SEMANTICS)
       (AND ROOT (PUTPROP WORD ROOT 'ROOT))
       WORD)

(DEFUN BUILDWORDLIST FEXPR (A)
								       ;DEFINES WORDS
       (MAPC '(LAMBDA (X)
								       ;ROOT IS OPTIONAL
		      (PRINT (BUILDWORD (CAR X)
					(CADR X)
					(CADDR X)
					(AND (CDDDR X) (CADDDR X)))))
	     A))

(SETQ CARRET '/
)

(DEFUN ETNEW NIL
       (AND (EQ (CAR WORD) '")
	    (EQ (CAR (LAST WORD)) '")
	    (SETQ WRD (READLIST (CDR (REVERSE (CDR WORD)))))
	    (BUILDWORD WRD
		       '(NOUN NS)
		       '((NOUN (NEWWORD)))
		       NIL)))

(SETQ FINAL '(/. ? !))

(SETQ CONSO '(B C D F G H J K L M N P Q R S T V W X Z))

0.

(SETQ LIQUID '(L R S Z V))

(SETQ PUNCL '(/. ? : /; " !))

(SETQ RUBOUT (ASCII 127.))

(DEFPROP UNDEFINED
	 (LAMBDA NIL (PROG2 (PRINC (WORD N)) (ERT UNDEFINED)))
	 EXPR)

(DEFUN UPPERCASE-IFY-CHAR (CHAR) (COND ((GREATERP 123. CHAR 96.) (-
CHAR 32.)) (T CHAR)))


(SETQ VOWEL '(NIL A E I O U Y)) 

(SETQ SPACE '/ )
From: Coby Beck
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <vlfwe.63402$wr.16483@clgrps12>
That is very long and messy code.  I tried to auto indent the first defun 
and it says unbalanced paren.  Clean it up and then look for the offending 
line.

-- 
Coby Beck
(remove #\Space "coby 101 @ bigpond . com")


"Mike Speed" <·······@yahoo.com> wrote in message 
····························@o13g2000cwo.googlegroups.com...
> Okay:
>
>
> (declare (genprefix morpho))
>
>
> ;;;********************************************************************************
> ;;;
> ;;;               MORPHO  - code for morphological analysis
> ;;;
> ;;;           includes ETAOIN, the input handler for the system
> ;;;
> ;;;********************************************************************************
>
>
> (DEFUN ETAOIN NIL
>       (PROG (WORD NEWWORD CHAR ALTN ALREADY-BLGING-NEWWRD WRD LAST
>       NEXT Y WORD1 X RD POSS)
> THRU (SETQ SENT (SETQ WORD (SETQ PUNCT (SETQ POSS NIL))))
>      (PRINT 'READY)
>      (TERPRI)
>      (AND MOBYREAD (IOC Q))
> CHAR (COND ((EQUAL (TYIPEEK) 24.) (READCH) (ERT) (GO THRU)); "cntrl-x"
> break
> ;left over from CMU
>                   ((= (tyipeek) 3.)
> (or (and mobyread (end-of-file-condition))
>    (bug etaoin: about to read eof)) )
> )
>      (setq char (cond ((greaterp 123. (setq char (tyi)) 96.) (- char
> 32.))
>       ((greaterp 91. char 64.) char)
>       (t char))
>              char (ascii char)
>                   ;;this little hack maps all lowercase letters into
> uppercase.
>    ;;a more reasonable thing to do would be to hack the chtrans
>    ;;property of the current readtable, but this was quicker to
>    ;;patch.
>                   )
>         (cond ((EQ char '/ ) (GO WORD))           ;DELIMITER
>    ((MEMQ CHAR ALTMODE)
>     (setq char (ascii (uppercase-ify-char (tyi))) )
>     (COND ((MEMQ char ALTMODE)
>    (ERT)
>    (GO THRU))
>        ;ALTMODE-ALTMODE
>   ((EQ CHAR 'C) (TYO 12.) (GO DO))
>        ;ALTMODE-C
>   ((EQ CHAR 'R) (TERPRI) (GO DO))
>        ;ALTMODE-R
>   ((AND (EQ CHAR 'S) SAVESENT)
>        ;ALTMODE-S CAUSES THE LAST SENTENCE TYPED IN TO
>    (SETQ SENT (CAR SAVESENT))
>        ;RETURNED AS THE SENTENCE TO BE INTERPRETED
>    (SETQ PUNCT (CDR SAVESENT))
>    (%)
>    (RETURN SENT))
>   ((EQ CHAR 'N)
>    (SETQ NEWWORD (NOT NEWWORD)
> ALTN (NOT ALTN))
>    (GO CHAR))
>        ;ALTMODE-N COMPLEMENTS THE NEWWORD FLAG, WHICH
>   ((EQ CHAR 'Q)
>        ;DETERMINES WHETHER UNRECOGNIZED WORDS WILL BE
>    (IOC Q)
>        ;CONSIDERED SPELLING ERRORS OR NEW WORDS.
>    (SETQ IGNORE NIL)
>    (GO THRU))
>        ;ALTMODE-Q CAUSES READIN FROM DISK FILE.
>   ((EQ CHAR 'M)
>    (IOC Q)
>    (SETQ IGNORE NIL MOBYREAD T)
>    (GO thru))
>   ((EQ CHAR 'I)
>    (SETQ IGNORE T)
>    (IOC Q)
>    (GO THRU))
>        ;ALTMODE-I IGNORES SENTENCE READ FROM FILE.
>   ((GO THRU))))
>    ((EQ CHAR RUBOUT)
>     (COND (WORD (PRINC (CAR WORD))
> (SETQ WORD (CDR WORD)))
>   (SENT (PRINT (CAR SENT))
> (SETQ SENT (CDR SENT))))
>     (GO CHAR))
>    ((EQ CHAR CARRET) (GO WORD))
>    ((MEMQ CHAR PUNCL)
>     (SETQ PUNCT CHAR)
>        ;DELIMITER
>     (AND WORD (GO WORD))
>     (GO PUNC)))
>      (AND
>       (OR (AND (EQ CHAR '")
>        (NOT ALREADY-BLGING-NEWRD)
>        (SETQ NEWWORD (SETQ ALREADY-BLGING-NEWRD T))
>        (GO CHAR))
>   (AND (EQ CHAR '")
>        ALREaDY-BLGING-NEWRD
>        (NOT (SETQ ALREADY-BLGING-NEWRD NIL))
>        (GO WORD))
>        ;WITHIN THIS "AND" ARE ALL THE CHARACTERS THAT
>   (NUMBERP CHAR)
>        ;ARE UNDERSTOOD BY THE SYSTEM
>   (AND (EQ CHAR '=) (NULL WORD))
>   (MEMQ CHAR VOWEL)
>   (MEMQ CHAR CONSO))
>       (SETQ WORD (CONS CHAR WORD)))
>      (GO CHAR)
> DO   (PRINT 'READY)
>      (TERPRI)
>      (MAPC (FUNCTION (LAMBDA (X) (PRINT2 X))) (REVERSE SENT))
>      (PRINC '/ )
>      (MAPC (FUNCTION PRINC) (REVERSE WORD))
>      (GO CHAR)
> WORD (COND ((NULL WORD) (GO CHAR))
>    ((EQUAL WORD '(P L E H)) (HELP) (GO THRU))
>    ((AND (SETQ WRD (ERRSET (READLIST (REVERSE WORD))))
> (NUMBERP (SETQ WRD (CAR WRD))))
>     (SETQ SENT (CONS WRD SENT))
>     (BUILDWORD WRD
>        (OR (AND (ZEROP (SUB1 WRD))
> '(NUM NS))
>    '(NUM))
>        (LIST 'NUM WRD)
>        NIL))
>        ;NO ROOT FOR NUMBERS
>    ((NULL WRD) (SETQ WRD (REVERSE WORD)) (GO NO))
>    ((GET WRD 'FEATURES))
>        ;IF A WORD HAS FEATURES, IT'S PROPERTIES
>    ((SETQ X (GET WRD 'IRREGULAR))
>        ;ARE ALL SET UP IN THE DICTIONARY
>     (BUILDWORD WRD
>        (MOD (GET (CAR X) 'FEATURES)
>     (CDR X))
>        (SM X)
>        (CAR X)))
>    ((EQ (CAR (LAST WORD)) '=)
>     (BUILDWORD WRD
>        (COND ((MEMQ '" WORD)
>       '(PROPN NS POSS))
>      ('(PROPN NS)))
>        '((PROPN T))
>        NIL))
>    ((GO CUT)))
>      (GO WRD)
>
>      ;;;---------------------------------------------
>      ;;;              MORPHOLOGY CODE
>      ;;;--------------------------------------------
> CUT  (COND ((STA WORD '(T " N))
>     (SETQ RD (CDDDR WORD))
>     (SETQ WORD (CONS '* WORD))
>     (GO TRY))
>    ((STA WORD '(S "))
>     (SETQ WORD (CDDR WORD))
>     (SETQ POSS WRD)
>     (GO WORD))
>    ((STA WORD '("))
>     (SETQ WORD (CDR WORD))
>     (SETQ POSS WRD)
>     (GO WORD))
>    ((STA WORD '(Y L))
>     (SETQ RD (CDDR WORD))
>     (GO LY))
>    ((STA WORD '(G N I)) (SETQ RD (CDDDR WORD)))
>    ((STA WORD '(D E)) (SETQ RD (CDDR WORD)))
>    ((STA WORD '(N E)) (SETQ RD (CDDR WORD)))
>    ((STA WORD '(R E)) (SETQ RD (CDDR WORD)))
>    ((STA WORD '(T S E)) (SETQ RD (CDDDR WORD)))
>    ((STA WORD '(S))
>     (SETQ RD (CDR WORD))
>     (GO SIB))
>    (T (GO NO)))
>      (SETQ LAST (CAR RD))
>      (SETQ NEXT (CADR RD))
>      (COND ((AND (MEMQ LAST CONSO)
> (NOT (MEMQ LAST LIQUID))
> (EQ LAST NEXT))
>     (SETQ RD (CDR RD)))
>    ((EQ LAST 'I)
>     (SETQ RD (CONS 'Y (CDR RD))))
>    ((OR (AND (MEMQ LAST CONSO)
>      (MEMQ NEXT VOWEL)
>      (NOT (EQ NEXT 'E))
>      (MEMQ (CADDR RD) CONSO))
> (AND (MEMQ LAST LIQUID)
>      (MEMQ NEXT CONSO)
>      (NOT (MEMQ NEXT LIQUID)))
> (AND (EQ LAST 'H) (EQ NEXT 'T))
> (AND (MEMQ LAST '(C G S J V Z))
>      (OR (MEMQ NEXT LIQUID)
> (AND (MEMQ NEXT VOWEL)
>       (MEMQ (CADDR RD) VOWEL)))))
>     (SETQ RD (CONS 'E RD))))
>      (GO TRY)
> LY   (COND ((AND (MEMQ (CAR RD) VOWEL)
> (NOT (EQ (CAR RD) 'E))
> (MEMQ (CADR RD) CONSO))
>     (SETQ RD (CONS 'E RD))))
>      (COND ((MEMQ 'ADJ
>   (GET (SETQ ROOT (READLIST (REVERSE RD)))
>        'FEATURES))
>     (BUILDWORD WRD
>        '(ADV VBAD)
>        NIL
>        ;TEMP NIL SEMANTICS
>        ROOT)
>        ;ROOT IS THE ADJECTIVE
>     (GO WRD)))
>      (GO NO)
> SIB  (SETQ LAST (CAR RD))
>      (SETQ NEXT (CADR RD))
>      (COND ((NOT (EQ LAST 'E)))
>    ((EQ NEXT 'I)
>     (SETQ RD (CONS 'Y (CDDR RD))))
>    ((EQ NEXT 'X) (SETQ RD (CDR RD)))
>    ((AND (EQ NEXT 'H)
> (NOT (EQ (CADDR RD) 'T)))
>     (SETQ RD (CDR RD)))
>    ((AND (MEMQ NEXT '(S Z))
> (EQ NEXT (CADDR RD)))
>     (SETQ RD (CDDR RD))))
> TRY  (COND
>       ((OR
> (SETQ FEATURES
>       (GET (SETQ ROOT (READLIST (REVERSE RD)))
>    'FEATURES))
> (AND (SETQ X (GET ROOT 'IRREGULAR))
>      (SETQ FEATURES
>    (MOD (GET (SETQ ROOT (CAR X))
>      'FEATURES)
> (CDR X)))))
>        (BUILDWORD WRD
>   (MOD FEATURES (GET (CAR WORD) 'MOD))
>   (GET ROOT 'SEMANTICS)
>   ROOT))
>       ((EQ (CAR RD) 'E) (SETQ RD (CDR RD)) (GO TRY))
>       ((GO NO)))
>
>      ;;;----------------------------------------------------
>      ;;;  BUILD UP THE PROCESSED LIST OF WORDS TO BE RETURNED
>      ;;;----------------------------------------------------
> WRD  (SETQ
>       SENT
>       (COND (POSS (COND ((OR (MEMQ 'NOUN
>    (SETQ FEATURES
> (GET WRD
>       'FEATURES)))
>        ;IF IT'S A NOUN
>      (MEMQ 'PROPN FEATURES))
>        ;OR A PROPER NOUN
> (BUILDWORD POSS
>     (APPEND (MEET FEATURES
>        ;MARK IT AS POSSESSIVE
>   (GET 'POSS
>        'ELIM))
>     '(POSS))
>     (GET WRD
> 'SEMANTICS)
>     ROOT)
> (CONS POSS SENT))
> ((BUILDWORD '"S
>        ; CAN WE GENERALIZE IT???
>     '(VB BE V3PS PRES)
>     (GET 'BE
> 'SEMANTICS)
>     'BE)
> (CONS '"S (CONS WRD SENT)))))
>     ((CONS WRD SENT))))
> PUNC (COND
>       (PUNCT (COND ((AND (EQ PUNCT '?) (NULL SENT))
>     (HELP)
>     (GO THRU))
>    ((MEMQ PUNCT FINAL)
>     (RETURN (CAR (SETQ SAVESENT
>        (CONS (REVERSE SENT)
>        ;RETURN POINT !!!!!!!!!!!!!
>      PUNCT)))))
>    ((SETQ SENT (CONS PUNCT SENT))))))
>      (SETQ PUNCT NIL)
>      (SETQ WORD (SETQ POSS NIL))
>      (GO CHAR)
> NO   (COND (NEWWORD (BUILDWORD WRD
>        '(NOUN NS)
>        '((NOUN (SMNEWNOUN))
> (PROPN (SMNEWPROPN)))
>        WRD)
>     (OR ALTN (SETQ NEWWORD NIL))
>     (GO PUNC)))
>      (TERPRI)
>      (SAY *SORRY I DON/'T KNOW THE WORD ")
>      (PRINC WRD)
>      (PRINC '/ "/.)
>      (TERPRI)
>      (SAY PLEASE TYPE <LF> AND CONTINUE THE SENTENCE/.)
> NOGO (OR (EQUAL (TYI) 10.) (GO NOGO))
>      (SETQ PUNCT NIL WORD NIL)
>      (GO DO)))
>
> (DEFUN PROPNAME (X) (EQ (CAR (EXPLODE X)) '=))
>
> (DEFUN BCWL FEXPR (A)
>        ;DEFINES COMBINATIONS OF WORDS
>       (MAPC
> '(LAMBDA (X)
>   (MAPC
>    '(LAMBDA (Y)
>      (BUILDWORD
>       (INTERN (MAKNAM (NCONC (EXPLODE (CAR X))
>      (CONS '-
>    (EXPLODE (CAR Y))))))
>       (CONS 'COMBINATION (CADR Y))
>       (CADDR Y)
>       (LIST (CAR X) (CAR Y))))
>    (CDR X)))
> A)
>       T)
>
> (DEFUN BUILDWORD (WORD FEATURES SEMANTICS ROOT)
>       (PUTPROP WORD FEATURES 'FEATURES)
>       (PUTPROP WORD (OR SMN SEMANTICS) 'SEMANTICS)
>       (AND ROOT (PUTPROP WORD ROOT 'ROOT))
>       WORD)
>
> (DEFUN BUILDWORDLIST FEXPR (A)
>        ;DEFINES WORDS
>       (MAPC '(LAMBDA (X)
>        ;ROOT IS OPTIONAL
>       (PRINT (BUILDWORD (CAR X)
> (CADR X)
> (CADDR X)
> (AND (CDDDR X) (CADDDR X)))))
>      A))
>
> (SETQ CARRET '/
> )
>
> (DEFUN ETNEW NIL
>       (AND (EQ (CAR WORD) '")
>     (EQ (CAR (LAST WORD)) '")
>     (SETQ WRD (READLIST (CDR (REVERSE (CDR WORD)))))
>     (BUILDWORD WRD
>        '(NOUN NS)
>        '((NOUN (NEWWORD)))
>        NIL)))
>
> (SETQ FINAL '(/. ? !))
>
> (SETQ CONSO '(B C D F G H J K L M N P Q R S T V W X Z))
>
> 0.
>
> (SETQ LIQUID '(L R S Z V))
>
> (SETQ PUNCL '(/. ? : /; " !))
>
> (SETQ RUBOUT (ASCII 127.))
>
> (DEFPROP UNDEFINED
> (LAMBDA NIL (PROG2 (PRINC (WORD N)) (ERT UNDEFINED)))
> EXPR)
>
> (DEFUN UPPERCASE-IFY-CHAR (CHAR) (COND ((GREATERP 123. CHAR 96.) (-
> CHAR 32.)) (T CHAR)))
>
>
> (SETQ VOWEL '(NIL A E I O U Y))
>
> (SETQ SPACE '/ )
> 
From: Jon Boone
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <m3acla8jqs.fsf@amicus.local>
>>    ((EQ CHAR RUBOUT)
>>     (COND (WORD (PRINC (CAR WORD))
>> (SETQ WORD (CDR WORD)))
>>   (SENT (PRINT (CAR SENT))

the 2nd line needs an additional open-paren after the (cond ...

--jon
From: Barry Margolin
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <barmar-941039.23584528062005@comcast.dca.giganews.com>
In article <··············@amicus.local>,
 Jon Boone <········@delamancha.org> wrote:

> >>    ((EQ CHAR RUBOUT)
> >>     (COND (WORD (PRINC (CAR WORD))
> >> (SETQ WORD (CDR WORD)))
> >>   (SENT (PRINT (CAR SENT))
> 
> the 2nd line needs an additional open-paren after the (cond ...

No it doesn't.  Then it would try to call WORD as a function, rather 
than evaluate it as a variable.

-- 
Barry Margolin, ······@alum.mit.edu
Arlington, MA
*** PLEASE post questions in newsgroups, not directly to me ***
From: Kent M Pitman
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <uhdfi5rhy.fsf@nhplace.com>
"Coby Beck" <·····@mercury.bc.ca> writes:

> That is very long and messy code.  I tried to auto indent the first defun 
> and it says unbalanced paren.  Clean it up and then look for the offending 
> line.

But it's a classic.  This remark is a bit like telling someone to sharpen
the focus on a Monet...

Probably modern indenting tools don't work because of the use of / as a
syntactic quoting element.  On a quick look, it seems balanced to me.
I suspect he has " defined as a readmacro, which wasn't true in the early
days of MACLISP when SHRDLU was written, but was true in later MACLISP
such as is running on the emulators.  Easy enough to fix by undefining
the readmacro or else slashing the doublequotes.
From: Geoffrey Summerhayes
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <Okgwe.1663$Ai.308389@news20.bellglobal.com>
"Kent M Pitman" <······@nhplace.com> wrote in message 
··················@nhplace.com...
> "Coby Beck" <·····@mercury.bc.ca> writes:
>
>> That is very long and messy code.  I tried to auto indent the first defun
>> and it says unbalanced paren.  Clean it up and then look for the 
>> offending
>> line.
>
> But it's a classic.  This remark is a bit like telling someone to sharpen
> the focus on a Monet...
>
> Probably modern indenting tools don't work because of the use of / as a
> syntactic quoting element.  On a quick look, it seems balanced to me.
> I suspect he has " defined as a readmacro, which wasn't true in the early
> days of MACLISP when SHRDLU was written, but was true in later MACLISP
> such as is running on the emulators.  Easy enough to fix by undefining
> the readmacro or else slashing the doublequotes.
>

Just curious, did it have strings as a datatype and if so how did it handle
them without a " readmacro?

--
Geoff 
From: Kent M Pitman
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <uirzyqps4.fsf@nhplace.com>
"Geoffrey Summerhayes" <·············@hotmail.com> writes:

> "Kent M Pitman" <······@nhplace.com> wrote in message 
> ··················@nhplace.com...
> > "Coby Beck" <·····@mercury.bc.ca> writes:
> >
> >> That is very long and messy code.  I tried to auto indent the first defun
> >> and it says unbalanced paren.  Clean it up and then look for the 
> >> offending
> >> line.
> >
> > But it's a classic.  This remark is a bit like telling someone to sharpen
> > the focus on a Monet...
> >
> > Probably modern indenting tools don't work because of the use of / as a
> > syntactic quoting element.  On a quick look, it seems balanced to me.
> > I suspect he has " defined as a readmacro, which wasn't true in the early
> > days of MACLISP when SHRDLU was written, but was true in later MACLISP
> > such as is running on the emulators.  Easy enough to fix by undefining
> > the readmacro or else slashing the doublequotes.
> >
> 
> Just curious, did it have strings as a datatype and if so how did it handle
> them without a " readmacro?

No, there's no primitive string datatype in MACLISP.  Symbols were used 
instead.  Symbols could be compared for SAMEPNAMEP and various people had
syntactic sugar on this to make it seem more like there were strings.  But
(princ '|foo|) was as likely to be done as (princ "foo") since most people
didn't trust the later to work.  There were two competing string packages:

 "fake strings" just made an uninterned symbol (so it would get gc'd if
 discarded) that had itself as a value and that would print with "'s
 around it.  there were no serious operations on fake strings other than
 to print them or concatenate them, but you could fake it with 
 explode, implode, samepnamep, etc.  You'd think these things were too
 slow, being O(n) rather than O(1) for access, since pnames were stored
 as lists of integers, each integer being a 36 bit word that held 5 
 seven-bit characters with one bit left over.  But in practice, since
 most applications didn't do heavy character-level operations, and were
 mostly using strings just for static messages, this didn't come up.
 Also, big-O notation only makes sense in the limit, but on the PDP10, 
 other limits hit you first--like a 256 Kword address space, keeping those
 big-O-ignored constant factors quite prominent.

 "real strings" had more overhead that i think most people thought to be
 overkill.  they were not symbols.  there were theoretical reasons why you 
 might want real strings if you were making a text editor or something to 
 do heavy string operations, but most people didn't do such things. for 
 most light programming, "fake strings" were adequate.
From: Coby Beck
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <4Ihwe.64051$wr.62654@clgrps12>
"Kent M Pitman" <······@nhplace.com> wrote in message 
··················@nhplace.com...
> "Coby Beck" <·····@mercury.bc.ca> writes:
>
>> That is very long and messy code.  I tried to auto indent the first defun
>> and it says unbalanced paren.  Clean it up and then look for the 
>> offending
>> line.
>
> But it's a classic.

Sorry.  Historically ignorant over here!

>  This remark is a bit like telling someone to sharpen
> the focus on a Monet...

Yeah, why doesn't someone fix that up... ;)

-- 
Coby Beck
(remove #\Space "coby 101 @ bigpond . com")
From: Kent M Pitman
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <ull4u5rme.fsf@nhplace.com>
"Mike Speed" <·······@yahoo.com> writes:

> (DEFUN ETAOIN NIL ...)

Some potential doublequote issues here.  See remarks below.  (I did my
commenting on this file from the bottom to the top, so I don't want to
repeat what I wrote below.) I suggest changing " to /" in the various
places they occur.

> (SETQ CARRET '/
> )

I can't remember if this is a risk.  It's POSSIBLE that a newline
mid-symbol is ignored (MACLISP had some weird provision like this that
might have been always on or only under a mode, so that long symbols
could be broken at reasonable line lengths), and so it's POSSIBLE that
this / is quoting the close paren.  It's also possible that some issue
with CRLF vs CR vs LF is causing you problems here.  I'd build this
symbol up programmatically rather than initializing it this way, for
clarity.  e.g. I think (IMPLODE '(13. 10.)) will give you what you want.

> (DEFUN ETNEW NIL
>        (AND (EQ (CAR WORD) '")
> 	    (EQ (CAR (LAST WORD)) '")
> 	    (SETQ WRD (READLIST (CDR (REVERSE (CDR WORD)))))
> 	    (BUILDWORD WRD
> 		       '(NOUN NS)
> 		       '((NOUN (NEWWORD)))
> 		       NIL)))

The unslashed doublequotes here are a risk if you have any string libraries
loaded that might enable " as a synonym for vertical bar.  

(Note to c.l.l.: MACLISP didn't have " defined by default since it had no
 string datatype. Various users wrote approximations to strings, some that
 stored chars in an array, but the most popular being ones that made 
 double-quote work kind of like vertical bar, producing an uninterned symbol
 with a property that said "print me with doublequotes" to the printer.)

> (SETQ FINAL '(/. ? !))

Probably ? and ! are not readmacros in your environment, but I'd slash
these anyway for safety.

> 0.

This toplevel atom is a little odd but should cause no problem.

> (SETQ PUNCL '(/. ? : /; " !))

This line might cause an imbalance if you have any string libraries loaded
that make " a readmacro.  In general, I would slash all of those characters
for safety.

(Note to c.l.l.: MACLISP used slash (/) not backslash (\) for syntactic 
quoting.)
From: Pascal Bourguignon
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <87vf3yyysv.fsf@thalassa.informatimago.com>
"Mike Speed" <·······@yahoo.com> writes:

> Okay:
>
>
> (declare (genprefix morpho))
> [...]

Well, I can load the following file flawlessly in a Common Lisp:


(proclaim '(declaration genprefix))
(shadow 'defun)
(defmacro defun (name &rest stuff)
  (if (listp (first stuff)) 
    `(common-lisp:defun ,name ,@stuff)  ; normal defun
    (case (first stuff)
      ((fexpr)
       (let ((fname (intern (with-standard-io-syntax
                                (format nil "~A-FEXPR" (symbol-name name)))
                            (symbol-package name))))
         `(progn
            (common-lisp:defun ,fname ,@(cdr stuff))
            (defmacro ,name ,(second stuff)
              (list ',fname ,@(mapcar (lambda (x) `(list 'quote ,x))
                                      (second stuff)))))))
      (otherwise (error "Unknown function type ~S" (first stuff))))))
(defun ascii (code) (code-char code))
(defmacro defprop (symbol value key)
  `(setf (get ',symbol ',key) ,value))
(defun greaterp (&rest args) (apply (function <) args))



(proclaim '(genprefix morpho))


;;;*****************************************************************************
;;;
;;;               MORPHO  - code for morphological analysis
;;;
;;;           includes ETAOIN, the input handler for the system
;;;
;;;*****************************************************************************

(DEFUN ETAOIN NIL
  (PROG (WORD NEWWORD CHAR ALTN ALREADY-BLGING-NEWWRD WRD LAST
              NEXT Y WORD1 X RD POSS)
        THRU (SETQ SENT (SETQ WORD (SETQ PUNCT (SETQ POSS NIL))))
        (PRINT 'READY)
        (TERPRI)
        (AND MOBYREAD (IOC Q))
        CHAR (COND ((EQUAL (TYIPEEK) 24.) (READCH) (ERT) (GO THRU)) 
                                        ; "cntrl-x" break
                                        ;left over from CMU
                   ((= (tyipeek) 3.)
                    (or (and mobyread (end-of-file-condition))
                        (bug |ETAOIN:| about to read eof)) )
                   )
        (setq char (cond ((greaterp 123. (setq char (tyi)) 96.) (- char 32.))
                         ((greaterp 91. char 64.) char)
                         (t char))
              char (ascii char)
              ;;this little hack maps all lowercase letters into uppercase.
              ;;a more reasonable thing to do would be to hack the chtrans
              ;;property of the current readtable, but this was quicker to
              ;;patch.
              )
        (cond ((EQ char '| |) (GO WORD)) ;;DELIMITER
              ((MEMQ CHAR ALTMODE)
               (setq char (ascii (uppercase-ify-char (tyi))) )
               (COND ((MEMQ char ALTMODE)
                      (ERT)
                      (GO THRU))
                     ;;ALTMODE-ALTMODE
                     ((EQ CHAR 'C) (TYO 12.) (GO DO))
                     ;;ALTMODE-C
                     ((EQ CHAR 'R) (TERPRI) (GO DO))
                     ;;ALTMODE-R
                     ((AND (EQ CHAR 'S) SAVESENT)
                      ;;ALTMODE-S CAUSES THE LAST SENTENCE TYPED IN TO
                      (SETQ SENT (CAR SAVESENT))
                      ;;RETURNED AS THE SENTENCE TO BE INTERPRETED
                      (SETQ PUNCT (CDR SAVESENT))
                      (%)
                      (RETURN SENT))
                     ((EQ CHAR 'N)
                      (SETQ NEWWORD (NOT NEWWORD)
                            ALTN (NOT ALTN))
                      (GO CHAR))
                     ;;ALTMODE-N COMPLEMENTS THE NEWWORD FLAG, WHICH
                     ((EQ CHAR 'Q)
                      ;;DETERMINES WHETHER UNRECOGNIZED WORDS WILL BE
                      (IOC Q)
                      ;;CONSIDERED SPELLING ERRORS OR NEW WORDS.
                      (SETQ IGNORE NIL)
                      (GO THRU))
                     ;;ALTMODE-Q CAUSES READIN FROM DISK FILE.
                     ((EQ CHAR 'M)
                      (IOC Q)
                      (SETQ IGNORE NIL MOBYREAD T)
                      (GO thru))
                     ((EQ CHAR 'I)
                      (SETQ IGNORE T)
                      (IOC Q)
                      (GO THRU))
                     ;;ALTMODE-I IGNORES SENTENCE READ FROM FILE.
                     ((GO THRU))))
              ((EQ CHAR RUBOUT)
               (COND (WORD (PRINC (CAR WORD))
                           (SETQ WORD (CDR WORD)))
                     (SENT (PRINT (CAR SENT))
                           (SETQ SENT (CDR SENT))))
               (GO CHAR))
              ((EQ CHAR CARRET) (GO WORD))
              ((MEMQ CHAR PUNCL)
               (SETQ PUNCT CHAR)
               ;;DELIMITER
               (AND WORD (GO WORD))
               (GO PUNC)))
        (AND
         (OR (AND (EQ CHAR '|"|)
                  (NOT ALREADY-BLGING-NEWRD)
                  (SETQ NEWWORD (SETQ ALREADY-BLGING-NEWRD T))
                  (GO CHAR))
             (AND (EQ CHAR '|"|)
                  ALREaDY-BLGING-NEWRD
                  (NOT (SETQ ALREADY-BLGING-NEWRD NIL))
                  (GO WORD))
             ;;WITHIN THIS "AND" ARE ALL THE CHARACTERS THAT
             (NUMBERP CHAR)
             ;;ARE UNDERSTOOD BY THE SYSTEM
             (AND (EQ CHAR '=) (NULL WORD))
             (MEMQ CHAR VOWEL)
             (MEMQ CHAR CONSO))
         (SETQ WORD (CONS CHAR WORD)))
        (GO CHAR)
        DO   (PRINT 'READY)
        (TERPRI)
        (MAPC (FUNCTION (LAMBDA (X) (PRINT2 X))) (REVERSE SENT))
        (PRINC '| |)
        (MAPC (FUNCTION PRINC) (REVERSE WORD))
        (GO CHAR)
        WORD (COND ((NULL WORD) (GO CHAR))
                   ((EQUAL WORD '(P L E H)) (HELP) (GO THRU))
                   ((AND (SETQ WRD (ERRSET (READLIST (REVERSE WORD))))
                         (NUMBERP (SETQ WRD (CAR WRD))))
                    (SETQ SENT (CONS WRD SENT))
                    (BUILDWORD WRD
                               (OR (AND (ZEROP (SUB1 WRD))
                                        '(NUM NS))
                                   '(NUM))
                               (LIST 'NUM WRD)
                               NIL))
                   ;;NO ROOT FOR NUMBERS
                   ((NULL WRD) (SETQ WRD (REVERSE WORD)) (GO NO))
                   ((GET WRD 'FEATURES))
                   ;;IF A WORD HAS FEATURES, IT'S PROPERTIES
                   ((SETQ X (GET WRD 'IRREGULAR))
                    ;;ARE ALL SET UP IN THE DICTIONARY
                    (BUILDWORD WRD
                               (MOD (GET (CAR X) 'FEATURES)
                                    (CDR X))
                               (SM X)
                               (CAR X)))
                   ((EQ (CAR (LAST WORD)) '=)
                    (BUILDWORD WRD
                               (COND ((MEMQ '|"| WORD)
                                      '(PROPN NS POSS))
                                     ('(PROPN NS)))
                               '((PROPN T))
                               NIL))
                   ((GO CUT)))
        (GO WRD)

;;;---------------------------------------------
;;;              MORPHOLOGY CODE
;;;--------------------------------------------
        CUT  (COND ((STA WORD '(T |"| N))
                    (SETQ RD (CDDDR WORD))
                    (SETQ WORD (CONS '* WORD))
                    (GO TRY))
                   ((STA WORD '(S |"|))
                    (SETQ WORD (CDDR WORD))
                    (SETQ POSS WRD)
                    (GO WORD))
                   ((STA WORD '(|"|))
                    (SETQ WORD (CDR WORD))
                    (SETQ POSS WRD)
                    (GO WORD))
                   ((STA WORD '(Y L))
                    (SETQ RD (CDDR WORD))
                    (GO LY))
                   ((STA WORD '(G N I)) (SETQ RD (CDDDR WORD)))
                   ((STA WORD '(D E)) (SETQ RD (CDDR WORD)))
                   ((STA WORD '(N E)) (SETQ RD (CDDR WORD)))
                   ((STA WORD '(R E)) (SETQ RD (CDDR WORD)))
                   ((STA WORD '(T S E)) (SETQ RD (CDDDR WORD)))
                   ((STA WORD '(S))
                    (SETQ RD (CDR WORD))
                    (GO SIB))
                   (T (GO NO)))
        (SETQ LAST (CAR RD))
        (SETQ NEXT (CADR RD))
        (COND ((AND (MEMQ LAST CONSO)
                    (NOT (MEMQ LAST LIQUID))
                    (EQ LAST NEXT))
               (SETQ RD (CDR RD)))
              ((EQ LAST 'I)
               (SETQ RD (CONS 'Y (CDR RD))))
              ((OR (AND (MEMQ LAST CONSO)
                        (MEMQ NEXT VOWEL)
                        (NOT (EQ NEXT 'E))
                        (MEMQ (CADDR RD) CONSO))
                   (AND (MEMQ LAST LIQUID)
                        (MEMQ NEXT CONSO)
                        (NOT (MEMQ NEXT LIQUID)))
                   (AND (EQ LAST 'H) (EQ NEXT 'T))
                   (AND (MEMQ LAST '(C G S J V Z))
                        (OR (MEMQ NEXT LIQUID)
                            (AND (MEMQ NEXT VOWEL)
                                 (MEMQ (CADDR RD) VOWEL)))))
               (SETQ RD (CONS 'E RD))))
        (GO TRY)
        LY   (COND ((AND (MEMQ (CAR RD) VOWEL)
                         (NOT (EQ (CAR RD) 'E))
                         (MEMQ (CADR RD) CONSO))
                    (SETQ RD (CONS 'E RD))))
        (COND ((MEMQ 'ADJ
                     (GET (SETQ ROOT (READLIST (REVERSE RD)))
                          'FEATURES))
               (BUILDWORD WRD
                          '(ADV VBAD)
                          NIL
                          ;;TEMP NIL SEMANTICS
                          ROOT)
               ;;ROOT IS THE ADJECTIVE
               (GO WRD)))
        (GO NO)
        SIB  (SETQ LAST (CAR RD))
        (SETQ NEXT (CADR RD))
        (COND ((NOT (EQ LAST 'E)))
              ((EQ NEXT 'I)
               (SETQ RD (CONS 'Y (CDDR RD))))
              ((EQ NEXT 'X) (SETQ RD (CDR RD)))
              ((AND (EQ NEXT 'H)
                    (NOT (EQ (CADDR RD) 'T)))
               (SETQ RD (CDR RD)))
              ((AND (MEMQ NEXT '(S Z))
                    (EQ NEXT (CADDR RD)))
               (SETQ RD (CDDR RD))))
        TRY  (COND
              ((OR
                (SETQ FEATURES
                      (GET (SETQ ROOT (READLIST (REVERSE RD)))
                           'FEATURES))
                (AND (SETQ X (GET ROOT 'IRREGULAR))
                     (SETQ FEATURES
                           (MOD (GET (SETQ ROOT (CAR X))
                                     'FEATURES)
                                (CDR X)))))
               (BUILDWORD WRD
                          (MOD FEATURES (GET (CAR WORD) 'MOD))
                          (GET ROOT 'SEMANTICS)
                          ROOT))
              ((EQ (CAR RD) 'E) (SETQ RD (CDR RD)) (GO TRY))
              ((GO NO)))

;;;----------------------------------------------------
;;;  BUILD UP THE PROCESSED LIST OF WORDS TO BE RETURNED
;;;----------------------------------------------------
        WRD  (SETQ
              SENT
              (COND (POSS (COND ((OR (MEMQ 'NOUN
                                           (SETQ FEATURES
                                                 (GET WRD
                                                      'FEATURES)))
                                     ;;IF IT'S A NOUN
                                     (MEMQ 'PROPN FEATURES))
                                 ;;OR A PROPER NOUN
                                 (BUILDWORD POSS
                                            (APPEND (MEET FEATURES
                                                          ;;MARK IT AS POSSESSIVE
                                                          (GET 'POSS
                                                               'ELIM))
                                                    '(POSS))
                                            (GET WRD
                                                 'SEMANTICS)
                                            ROOT)
                                 (CONS POSS SENT))
                                ((BUILDWORD '|"|S
                                            ;; CAN WE GENERALIZE IT???
                                            '(VB BE V3PS PRES)
                                            (GET 'BE
                                                 'SEMANTICS)
                                            'BE)
                                 (CONS '|"|S (CONS WRD SENT)))))
                    ((CONS WRD SENT))))
        PUNC (COND
              (PUNCT (COND ((AND (EQ PUNCT '?) (NULL SENT))
                            (HELP)
                            (GO THRU))
                           ((MEMQ PUNCT FINAL)
                            (RETURN (CAR (SETQ SAVESENT
                                               (CONS (REVERSE SENT)
                                                     ;;RETURN POINT !!!!!!!!!!!!!
                                                     PUNCT)))))
                           ((SETQ SENT (CONS PUNCT SENT))))))
        (SETQ PUNCT NIL)
        (SETQ WORD (SETQ POSS NIL))
        (GO CHAR)
        NO   (COND (NEWWORD (BUILDWORD WRD
                                       '(NOUN NS)
                                       '((NOUN (SMNEWNOUN))
                                         (PROPN (SMNEWPROPN)))
                                       WRD)
                            (OR ALTN (SETQ NEWWORD NIL))
                            (GO PUNC)))
        (TERPRI)
        (SAY *SORRY I DON\'T KNOW THE WORD |"|)
        (PRINC WRD)
        (PRINC '| ".|)
        (TERPRI)
        (SAY PLEASE TYPE <LF> AND CONTINUE THE SENTENCE\.)
        NOGO (OR (EQUAL (TYI) 10.) (GO NOGO))
        (SETQ PUNCT NIL WORD NIL)
        (GO DO)))

(DEFUN PROPNAME (X) (EQ (CAR (EXPLODE X)) '=))

(DEFUN BCWL FEXPR (A)
  ;;DEFINES COMBINATIONS OF WORDS
  (MAPC
   '(LAMBDA (X)
      (MAPC
       '(LAMBDA (Y)
          (BUILDWORD
           (INTERN (MAKNAM (NCONC (EXPLODE (CAR X))
                                  (CONS '-
                                        (EXPLODE (CAR Y))))))
           (CONS 'COMBINATION (CADR Y))
           (CADDR Y)
           (LIST (CAR X) (CAR Y))))
       (CDR X)))
   A)
  T)

(DEFUN BUILDWORD (WORD FEATURES SEMANTICS ROOT)
  (PUTPROP WORD FEATURES 'FEATURES)
  (PUTPROP WORD (OR SMN SEMANTICS) 'SEMANTICS)
  (AND ROOT (PUTPROP WORD ROOT 'ROOT))
  WORD)

(DEFUN BUILDWORDLIST FEXPR (A)
  ;;DEFINES WORDS
  (MAPC '(LAMBDA (X)
           ;;ROOT IS OPTIONAL
           (PRINT (BUILDWORD (CAR X)
                             (CADR X)
                             (CADDR X)
                             (AND (CDDDR X) (CADDDR X)))))
        A))

(SETQ CARRET '|^|)

(DEFUN ETNEW NIL
  (AND (EQ (CAR WORD) '|"|)
       (EQ (CAR (LAST WORD)) '|"|)
       (SETQ WRD (READLIST (CDR (REVERSE (CDR WORD)))))
       (BUILDWORD WRD
                  '(NOUN NS)
                  '((NOUN (NEWWORD)))
                  NIL)))

(SETQ FINAL '(\. ? !))

(SETQ CONSO '(B C D F G H J K L M N P Q R S T V W X Z))

(SETQ LIQUID '(L R S Z V))

(SETQ PUNCL '(\. ? : |;| |"| !))

(SETQ RUBOUT (ASCII 127.))

(DEFPROP UNDEFINED
  (LAMBDA NIL (PROG2 (PRINC (WORD N)) (ERT UNDEFINED)))
  EXPR)

(DEFUN UPPERCASE-IFY-CHAR (CHAR)
  (COND ((GREATERP 123. CHAR 96.) (- CHAR 32.))
        (T CHAR)))


(SETQ VOWEL '(NIL A E I O U Y)) 

(SETQ SPACE '| |)



-- 
__Pascal Bourguignon__                     http://www.informatimago.com/
The rule for today:
Touch my tail, I shred your hand.
New rule tomorrow.
From: Peter Lewerin
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <b72f3640.0506280308.c83aed5@posting.google.com>
"Mike Speed" <·······@yahoo.com> wrote

> (declare (genprefix morpho))
> 
> (DEFUN ETAOIN NIL

You will probably find it easier to work with the Common Lisp code at
<URL: http://hci.stanford.edu/winograd/shrdlu/download/consoleshrdlu.zip>.
From: Mike Speed
Subject: Re: I can't find which line is causing the error
Date: 
Message-ID: <1119960525.266328.286290@o13g2000cwo.googlegroups.com>
Yes, I am very well aware of that code - you can see my real name
listed there - Greg Sharp (mike8s2).  I want the ,um, "real" code to
run under PDP10 emulation via ITS.