home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
RBBS in a Box Volume 1 #3.1
/
RBBSIABOX31.cdr
/
medi
/
match.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-09-02
|
4KB
|
141 lines
(*MATCH FUNCTION FOR NATURAL LANGUAGE*)
(*RESPONSE ANALYSIS*)
(*PAUL F. MERRILL*)
(*BRIGHAM YOUNG UNIVERSITY*)
PROGRAM PILOT;
TYPE STRARRAY=ARRAY[1..100] OF STRING;
VAR C:CHAR;
KEYWORDSTR,ANS,MATCHSTR:STRING;
FUNCTION MATCH (ANSSTR,STUDENTANS:STRING):BOOLEAN;
CONST SPACE=' ';
VAR P,NWORDS,INDEX:INTEGER;
ORDER,FOUND:BOOLEAN;ANSARRAY:STRARRAY;
PROCEDURE DELCOMMA (VAR MATCHSTR:STRING);
VAR I:INTEGER;
BEGIN
FOR I:= 1 TO LENGTH(MATCHSTR) DO
IF MATCHSTR[I]<'A'
THEN
MATCHSTR[I]:= ' ';
END; (*DELCOMMA*)
PROCEDURE SEPRTE (ANSSTR:STRING;VAR ANSARRAY:STRARRAY;VAR NWORDS:INTEGER);
CONST COMMA=',';
VAR LOCCOMMA:INTEGER;
BEGIN
ANSSTR:=CONCAT(ANSSTR,COMMA);
NWORDS:=0;
WHILE LENGTH (ANSSTR)>1 DO
BEGIN
LOCCOMMA:=POS(COMMA,ANSSTR);
NWORDS:=NWORDS+1;
ANSARRAY[NWORDS]:=COPY(ANSSTR,1,LOCCOMMA-1);
DELETE (ANSSTR,1,LOCCOMMA);
END; (*WHILE*)
END; (*SEPRTE*)
PROCEDURE ORDERCHK;
BEGIN
FOUND:=TRUE;
IF ORDER
THEN
BEGIN
DELETE (STUDENTANS,1,P+LENGTH(ANSARRAY[INDEX])-1);
STUDENTANS:=CONCAT(SPACE,STUDENTANS);
END; (*IF*)
END; (*ORDERCHK*)
PROCEDURE ORTEST;
BEGIN
ANSARRAY[INDEX]:=COPY(ANSARRAY[INDEX],2,LENGTH(ANSARRAY[INDEX])-1);
WHILE POS(')',ANSARRAY[INDEX])=0 DO
BEGIN
P:=POS (ANSARRAY[INDEX],STUDENTANS);
IF P<>0
THEN ORDERCHK;
INDEX:=INDEX+1;
END; (*WHILE*)
IF NOT FOUND
THEN
BEGIN
DELETE (ANSARRAY[INDEX],LENGTH(ANSARRAY[INDEX]),1);
P:=POS (ANSARRAY[INDEX],STUDENTANS);
IF P<>0
THEN ORDERCHK
END; (*IF NOT FOUND*)
END; (*ORTEST*)
BEGIN (*MATCH FUNCTION*)
DELCOMMA(STUDENTANS);
STUDENTANS:=CONCAT(SPACE,STUDENTANS,SPACE);
ORDER:=ANSSTR[1]='*';
IF ORDER THEN DELETE (ANSSTR,1,1);
SEPRTE(ANSSTR,ANSARRAY,NWORDS);
INDEX:=1;
REPEAT
FOUND:=FALSE;
IF ANSARRAY[INDEX,1]='('
THEN
BEGIN
ORTEST;
IF NOT FOUND
THEN
BEGIN
MATCH:=FALSE;
EXIT(MATCH)
END;
END (*THEN*)
ELSE
BEGIN
P:=POS (ANSARRAY[INDEX],STUDENTANS);
IF P<>0
THEN ORDERCHK
ELSE
BEGIN
MATCH:=FALSE;
EXIT(MATCH);
END; (*ELSE*)
END; (*ELSE*)
INDEX:=INDEX+1
UNTIL INDEX>NWORDS;
MATCH:=FOUND
END; (*MATCH FUNCTION*)
BEGIN (*MAIN PROGRAM*)
KEYWORDSTR:='';
REPEAT
PAGE (OUTPUT);
WRITELN;WRITELN;
WRITELN('MATCH FUNCTION DEMO':28);
WRITELN;WRITELN('THIS DEMONSTRATION PROGRAM CAN BE USED');
WRITELN('TO EXPERIMENT WITH THE MATCH FUNCTION.');
WRITELN;WRITELN('ENTER CORRECT @NSWER STRING OR RETURN:');
WRITELN(' EG.: * RED ,(GREEN, PINK ),YELLOW');
WRITELN;
READLN (ANS);
IF LENGTH(ANS)<>0
THEN KEYWORDSTR:=ANS
ELSE
BEGIN
WRITELN;WRITELN('DEFAULT CORRECT ANSWER STRING:');
WRITELN(' ',KEYWORDSTR);
END;
WRITELN;WRITELN('ENTER MATCH STRING:');
WRITELN;
READLN(MATCHSTR);
WRITELN;WRITE('***** ');
IF MATCH (KEYWORDSTR,MATCHSTR)
THEN WRITE('MATCH')
ELSE WRITE('NO MATCH');
WRITELN(' *****');
WRITELN;WRITE('<SPACE> TO CONTINUE <ESC> TO QUIT ');
READ(C);
UNTIL C=CHR(27);
END.