Finding Eliza – The First Chatbot

aanet1 pts0 comments

The first chatbot · ELIZA (1966)

CHANGE MAD<br>EXTERNAL FUNCTION (KEY,MYTRAN) 000010<br>NORMAL MODE IS INTEGER 000020<br>ENTRY TO CHANGE. 000030<br>LIST.(INPUT) 000040<br>V'S G(1)=$TYPE$,$SUBST$,$APPEND$,$ADD$, 000050<br>1$START$,$RANK$,$DISPLA$ 000060<br>V'S SNUMB = $ I3 *$ 000070<br>FIT=0 000080<br>CHANGE PRINT COMMENT $PLEASE INSTRUCT ME$ 001400<br>LISTRD.(MTLIST.(INPUT),0) 001410<br>JOB=POPTOP.(INPUT) 001420<br>T'H IDENT, FOR J=1,1, J.G. 7 001430<br>IDENT W'R G(J) .E. JOB, T'O THEMA 001440<br>PRINT COMMENT $CHANGE NOT RECOGNIZED$ 001450<br>T'O CHANGE 001460<br>THEMA W'R J .E. 5, F'N IRALST.(INPUT) 001470<br>W'R J .E. 7 001480<br>T'H DISPLA, FOR I=0,1, I .G. 32 001490<br>W'R LISTMT.(KEY(I)) .E. 0, T'O DISPLA 001500<br>S=SEQRDR.(KEY(I)) 001510<br>READ(7) NEXT=SEQLR.(S,F) 001520<br>W'R F .G. 0, T'O DISPLA 001530<br>PRINT COMMENT $*$ 001540<br>TPRINT.(NEXT,0) 001550<br>PRINT FORMAT SNUMB,I 001560<br>PRINT COMENT $ $ 001570<br>T'O READ(7) 001580<br>DISPLA CONTINUE 001590<br>PRINT COMMENT $ $ 001600<br>PRINT COMMENT $MEMORY LIST FOLLOWS$ 001610<br>PRINT COMMENT $ $ 001620<br>T'H MEMLIST, FOR I=1 , 1, I .G. 4 001630<br>MEMLST TXTPRT.(MYTRAN(I),0) 001640<br>T'O CHANGE 001650<br>E'L 001660<br>THEME=POPTOP.(INPUT) 001670<br>SUBJECT=KEY(HASH.(THEME,5)) 001680<br>S=SEQRDR.(SUBJECT) 001690<br>LOOK TERM=SEQLR.(S,F) 001700<br>W'R F .G. 0, T'O FAIL 001710<br>W'R TOP.(TERM) .E. THEME, T'O FOUND 001720<br>T'O LOOK 001730<br>FOUND T'O DELTA(J) 001740<br>DELTA(1) TPRINT.(TERM,0) 001750<br>T'O CHANGE 001760<br>FAIL PRINT COMMENT $LIST NOT FOUND$ 001770<br>T'O CHANGE 001780<br>DELTA(2) S=SEQRDR.(TERM) 001790<br>OLD=POPTOP.(INPUT) 001800<br>READ(1) OBJCT=SEQLR.(S,F) 001810<br>W'R F .G. 0, T'O FAIL 001820<br>W'R F .NE. 0, T'O READ(1) 001830<br>INSIDE=SEQRDR.(OBJECT) 001840<br>READ(2) IT=SEQLR.(INSIDE,F) 001850<br>W'R F .G. 0, T'O READ(1) 001860<br>SIT=SEQRDR.(IT) 001870<br>SOLD=SEQRDR.(OLD) 001880<br>ITOLD TOLD=SEQLR.(SOLD,FOLD) 001890<br>DIT=SEQLR.(SIT,FIT) 001900<br>W'R TOLD .E. DIT .AND. FOLD .LE. 0,T'O ITOLD 001910<br>W'R FOLD .G. 0, T'O OK(J) 001920<br>T'O READ(2) 001930<br>OK(2) SUBST.(POPTOP.(INPUT),LSPNTR.(INSIDE)) 001940<br>T'O CHANGE 001950<br>OK(3) NEWBOT.(POPTOP.(INPUT),OBJCT) 001960<br>T'O CHANGE 001970<br>DELTA(3) T'O DELTA(2) 001980<br>DELTA(4) W'R NAMTST.(BOT.(TERM)) .E. 0 001990<br>BOTTOM=POPBOT.(TERM) 002000<br>NEWBOT.(POPTOP.(INPUT),TERM) 002010<br>NEWBOT.(BOTTOM,TERM) 002020<br>O'E 002030<br>NEWBOT.(POPTOP.(INPUT),TERM) 002040<br>E'L 002050<br>T'O CHANGE 002060<br>DELTA(6) S=SEQRDR.(TERM) 002070<br>READ(6) OBJCT=SEQLR.(S,F) 002080<br>W'R F .G. 0, T'O FAIL 002090<br>W'R F .NE. 0, T'O READ(6) 002100<br>OBJCT=SEQLL.(S,F) 002110<br>W'R LNKLL.(OBJECT) .E. 0 002120<br>SUBST.(POPTOP.(INPUT),LSPNTR.(S)) 002130<br>O'E 002140<br>NEWTOP.(POPTOP.(INPUT),LSPNTR.(S)) 002150<br>E'L 002160<br>T'O CHANGE 002170<br>R* * * * * * * * * * END OF MODIFICATION ROUTINE 002180<br>E'N 002200<br>TPRINT MAD<br>EXTERNAL FUNCTION (LST) 000010<br>NORMAL MODE IS INTEGER 000020<br>ENTRY TO TPRINT. 000030<br>SA=SEQRDR.(LST) 000040<br>LIST.(OUT) 000050<br>READ NEXT=SEQLR.(SA,FA) 000060<br>W'R FA .G. 0, T'O P 000070<br>W'R FA .E. 0, T'O B 000080<br>POINT=NEWBOT.(NEXT,OUT) 000100<br>W'R SA .L. 0, MRKNEG.(POINT) 000110<br>T'O READ 000120<br>B TXTPRT.(OUT,0) 000130<br>SEQLL.(SA,FA) 000140<br>MORE NEXT=SEQLR.(SA,FA) 000150<br>W'R TOP.(NEXT) .E. $=$ 000160<br>TXTPRT.(NEXT,0) 000170<br>T'O MORE 000180<br>E'L 000190<br>W'R FA .G. 0, T'O DONE 000200<br>PRINT COMMENT $ $ 000210<br>SB=SEQRDR.(NEXT) 000220<br>MEHR TERM=SEQLR.(SB,FB) 000230<br>W'R FB .L.0 000240<br>PRINT ON LINE FORMAT NUMBER, TERM 000250<br>V'S NUMBER = $I3 *$ 000260<br>T'O MEHR 000270<br>E'L 000280<br>W'R FB .G. 0, T'O MORE 000290<br>TXTPRT.(TERM,0) 000300<br>T'O MEHR 000310<br>P TXTPRT.(OUT,0) 000320<br>DONE IRALST.(OUT) 000330<br>F'N 000340<br>E'N 000350<br>LPRINT MAD<br>EXTERNAL FUNCTION (LST,TAPE) 006340<br>NORMAL MODE IS INTEGER 006350<br>ENTRY TO LPRINT. 006360<br>BLANK = $ $ 006370<br>EXECUTE PLACE.(TAPE,0) 006380<br>LEFTP = 606074606060K 006390<br>RIGHTP= 606034606060K 006400<br>BOTH = 607460603460K 006410<br>EXECUTE NEWTOP.(SEQRDR.(LST),LIST.(STACK)) 006420<br>S=POPTOP.(STACK) 006430<br>BEGIN EXECUTE PLACE.(LEFTP,1) 006440<br>NEXT WORD=SEQLR.(S,FLAG) 006450<br>W'R FLAG .L. 0 006460<br>EXECUTE PLACE.(WORD,1) 006470<br>W'R S .G. 0, PLACE.(BLANK,1) 006480<br>T'O NEXT 006490<br>OR W'R FLAG .G. 0 006500<br>EXECUTE PLACE.(RIGHTP,1) 006510<br>W'R LISTMT.(STACK) .E. 0, T'O DONE 006520<br>S=POPTOP.(STACK) 006530<br>T'O NEXT 006540<br>OTHERWISE 006550<br>W'R LISTMT.(WORD) .E. 0 006560<br>EXECUTE PLACE.(BOTH,1) 006570<br>T'O NEXT 006580<br>OTHERWISE 006590<br>EXECUTE NEWTOP.(S,STACK) 006600<br>S=SEQRDR.(WORD) 006610<br>T'O BEGIN 006620<br>E'L 006630<br>E'L 006640<br>DONE EXECUTE PLACE.(0,-1) 006650<br>EXECUTE IRALST.(STACK) 006660<br>FUNCTION RETURN LST 006670<br>END OF FUNCTION 006680<br>TESTS MAD<br>EXTERNAL FUNCTION(CAND,S) 000010<br>NORMAL MODE IS INTEGER 000020<br>DIMENSION FIRST(5),SECOND(5) 000030<br>ENTRY TO TESTS. 000040<br>STORE=S 000050<br>READER=SEQRDR.(CAND) 000060<br>T'H ONE, FOR I=0,1, I .G. 100 000070<br>FIRST(I)=SEQLR.(READER,FR) 000080<br>ONE W'R READER .G. 0, T'O ENDONE 000090<br>ENDONE SEQLL.(S,F) 000100<br>T'H TWO, FOR J=0,1, J .G. 100 000110<br>SECOND(J)=SEQLR.(S,F) 000120<br>TWO W'R S .G. 0, T'O ENDTWO 000130<br>ENDTWO W'R I .NE. J, F'N 0 000140<br>T'H LOOK, FOR K=0,1, K.G. J 000150<br>LOOK W'R FIRST(K) .NE. SECOND(K), F'N 0 000170<br>EQL=SEQLR.(READER,FR) 000180<br>W'R EQL .NE. $=$...

seqlr term change input seqrdr next

Related Articles