* Program: abc.sbl, * To run: sbl -r abc.sbl * Comment: Tested using the Spitbol for Linux version of SNOBOL4 * Read in blocks to construct the blocks string in1 line = replace(input,&lcase,&ucase) :f(in1end) line ? breakx(' ') . pre ' ' rem . post :f(in1end) blocks = blocks "," pre post :(in1) in1end * Function to determine if a word can be constructed with the given blocks define('abc(blocks,word)s,i,let') abcpat = (breakx(',') ',') . pre (*let len(1) | len(1) *let) rem . post :(abc_end) abc eq(size(word),0) :s(abc3) s = replace(word,&lcase,&ucase) i = 0 abc2 i = lt(i,size(s)) i + 1 :f(abc4) let = substr(s,i,1) blocks ? abcpat = pre post :f(abc3) :(abc2) abc3 abc = 'False' :(abc5) abc4 abc = 'True' :(abc5) abc5 output = lpad('can_make_word("' word '"): ',26) abc abc = "" :(return) abc_end * Check words * output = abc(blocks,"") * output = abc(blocks," ") output = abc(blocks,'A') output = abc(blocks,'bark') output = abc(blocks,'BOOK') output = abc(blocks,'TrEAT') output = abc(blocks,'COMMON') output = abc(blocks,'SQUAD') output = abc(blocks,'CONFUSE') * The blocks are entered below, after the following END label END b o X K D Q C P N A G T R E T G Q D F S J W H U V I A N O B E R F S L Y P C Z M