home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / compuserve / Basic / LEARN.SF9 < prev    next >
Text File  |  2006-10-19  |  12KB  |  544 lines

  1.  
  2.  
  3.  
  4.   SF99-WARE
  5.   ---------
  6.  
  7.  
  8.   +++++++++++++++++++++++++++++++++++
  9.        SF99-WARE is a new feature  in
  10.   SUBFILE99.   Each  issue  SF99-WARE
  11.   will    feature   a   full - length
  12.   commercial-quality program free  to
  13.   all who subscribe to SF99.
  14.        If you have a program that  you
  15.   think other TI'ers might enjoy, SF99
  16.   will pay you  to  publish  it  here.
  17.   Write to SF99 for more info.
  18.   +++++++++++++++++++++++++++++++++++
  19.  
  20.  
  21.  
  22.   THE TI LEARNING MACHINE
  23.   -----------------------
  24.  
  25.  
  26.  
  27.        Below is a program that actually
  28.   learns  from  the  user! This program
  29.   uses a binary search tree routine  to
  30.   ask  you  questions,  look  into it's
  31.   "memory" for an  answer  and  respond
  32.   accordingly.   It's  a  great program
  33.   for children (they get to "teach" the
  34.   computer,  not the other way around!)
  35.   and it's an excellent example of  the
  36.   use  of  subroutines  and  the binary
  37.   search tree.
  38.  
  39.  
  40.        Teaching the Learning Machine
  41.        -----------------------------
  42.  
  43.        The Learning  Machine  can  only
  44.   learn   by   asking  questions.   The
  45.   firsttime you ever run  The  Learning
  46.   Machine,  you  have  to  give  it the
  47.   first answers.  After that,  Learning
  48.   Machine  will build upon each new bit
  49.   of information you give it.  Below is
  50.   a  sample  session  with The Learning
  51.   Machine:
  52.  
  53.        1) At the Main Menu  select  <B>
  54.   for Begin Session.
  55.  
  56.        2)  Answer N to the question "Is
  57.   a file in memory?"
  58.  
  59.        3) At the next menu select 2  to
  60.   start a new file
  61.        4)  The  Learning Machine learns
  62.   to  recognize  somthing   through   a
  63.   single distinguishing characteristic.
  64.   In this session  we  will  teach  the
  65.   Learning Machine about books.  At the
  66.   first prompt type "A Novel"  for  the
  67.   first characteristic.
  68.  
  69.        5)  At  the next prompt type the
  70.   answer "Oliver Twist." The machine is
  71.   now   ready  to  start  learning  new
  72.   items.
  73.  
  74.        6) The Learning Machine will now
  75.   ask  you a question: "Is it a novel?"
  76.   For now answer NO.
  77.  
  78.        7) Since  the  Learning  Machine
  79.   knows  of no other books, it gives up
  80.   and asks you for the correct  answer.
  81.   This time type "Starting FORTH."
  82.  
  83.        8)  When  it  asks  you  for the
  84.   distinguishing  characteristic,  type
  85.   "about computers."
  86.  
  87.        9)  Continue  this process until
  88.   you  have  amassed  a  good  body  of
  89.   questions  (at  present  the Learning
  90.   Machine can only  keep  track  of  50
  91.   answers  - change this in line 450 if
  92.   you wish!).
  93.  
  94.        10) To end a session just select
  95.   <E>  at  the  Main Menu and save your
  96.   file to disk or cassette.
  97.  
  98.  
  99.        Building Knowledge
  100.        ------------------
  101.  
  102.        Several topics of knowledge base
  103.   are  available through SF99 including
  104.   BOOKS, MUSIC, MOVIES, and  COMPUTERS.
  105.   If you'd like a copy of the disk that
  106.   contains all  of  these  four  files,
  107.   send  an  initialized  SSSD disk with
  108.   self-addressed/stamped envelope to:
  109.  
  110.        THE LEARNING MACHINE FILES
  111.        c/o SUBFILE99
  112.        POB 533
  113.        Bowling Green, Ohio 43402
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122. 100 REM  *******************
  123. 110 REM  *                 *
  124. 120 REM  *      T H E      *
  125. 130 REM  *                 *
  126. 140 REM  * L E A R N I N G *
  127. 150 REM  *                 *
  128. 160 REM  *  M A C H I N E  *
  129. 170 REM  *                 *
  130. 180 REM  *******************
  131. 190 REM
  132. 200 REM       TI-BASIC
  133. 210 REM
  134. 220 REM      M AMUNDSEN
  135. 230 REM      TOLEDO, OH
  136. 240 REM        7/8/84
  137. 250 REM
  138. 260 REM      ***********
  139. 270 REM      *VARIABLES*
  140. 280 REM      ***********
  141. 290 REM
  142. 300 REM   A$-ANSWER
  143. 310 REM   C$-CHARACTERISTIC
  144. 320 REM  Q1$-QUEST HEADER
  145. 330 REM  Q2$-QUEST TAIL
  146. 340 REM  T1$-TEMP$
  147. 350 REM  T2$ TEMP$
  148. 360 REM   LL-LEFT  LINK
  149. 370 REM   RL-RIGHT LINK
  150. 380 REM    P-ARRAY POINTER
  151. 390 REM    N-# OF ITEMS
  152. 400 REM
  153. 410 DEF TABR=29-LEN(M$)
  154. 420 DEF TABC=(28-LEN(M$))/2
  155. 430 Q1$="IS IT "
  156. 440 Q2$="?(Y/N)"
  157. 450 DIM C$(50),A$(50),LL(50),RL(50)
  158. 460 REM
  159. 470 CALL CLEAR
  160. 480 CALL SCREEN(6)
  161. 490 FOR L=1 TO 12
  162. 500 CALL COLOR(L,16,1)
  163. 510 NEXT L
  164. 520 REM
  165. 530 REM  *LOGO*
  166. 540 REM
  167. 550 FOR X=133 TO 143
  168. 560 READ X$
  169. 570 CALL CHAR(X,X$)
  170. 580 LOGO$=LOGO$&CHR$(X)
  171. 590 NEXT X
  172. 600 DATA 3C4299A1A199423C,6324242320202473,0C92928C9292920C,1010505078101038,,
  173. 6094F79494949090
  174. 610 DATA 0000679494170404,00001C91911C,0304E21111E10106,000039444438,
  175. 4088DC8888888804
  176. 620 REM
  177. 630 REM   **************
  178. 640 REM   *TITLE SCREEN*
  179. 650 REM   **************
  180. 660 REM
  181. 670 REM
  182. 680 FOR L=1 TO 14
  183. 690 READ M$
  184. 700 PRINT TAB(TABC);M$
  185. 710 NEXT L
  186. 720 DATA T H E,,L E A R N I N G,,M A C H I N E,,,,,,,,,
  187. 730 REM
  188. 740 CALL HCHAR(8,7,42,19)
  189. 750 CALL HCHAR(16,7,42,19)
  190. 760 CALL VCHAR(9,7,42,7)
  191. 770 CALL VCHAR(9,25,42,7)
  192. 780 M$=LOGO$
  193. 790 PRINT TAB(TABC);M$:::
  194. 800 GOSUB 3800
  195. 810 REM
  196. 820 REM  *****************
  197. 830 REM  *MAIN SUPERVISOR*
  198. 840 REM  *****************
  199. 850 REM
  200. 860 CALL CLEAR
  201. 870 PRINT "SELECT ONE:"::::
  202. 880 PRINT TAB(7);"<B>EGIN SESSION":::TAB(7);"<L>IST ITEMS":::TAB(7);
  203. "<I>NSPECT FILE":::TAB(7);"<E>ND SESSION"::::
  204. 890 XR$="BLIE"
  205. 900 GOSUB 3710
  206. 910 ON XR GOSUB 960,1120,1230,1340
  207. 920 GOTO 860
  208. 930 REM
  209. 940 REM  *BEGIN SESSION*
  210. 950 REM
  211. 960 CALL CLEAR
  212. 970 PRINT "IS A FILE IN MEMORY?(Y/N)":::
  213. 980 GOSUB 3960
  214. 990 IF XR=1 THEN 1070
  215. 1000 PRINT "SELECT ONE:"::::TAB(5);"1 - OPEN  OLD FILE":::TAB(5);
  216. "2 - START NEW FILE":::::
  217. 1010 XT=2
  218. 1020 GOSUB 3880
  219. 1030 IF XK=1 THEN 1060
  220. 1040 GOSUB 3490
  221. 1050 GOTO 1070
  222. 1060 GOSUB 2900
  223. 1070 GOSUB 1480
  224. 1080 RETURN
  225. 1090 REM
  226. 1100 REM  *LIST ITEMS*
  227. 1110 REM
  228. 1120 CALL CLEAR
  229. 1130 PRINT "USE FILE IN MEMORY?(Y/N)":::
  230. 1140 GOSUB 3960
  231. 1150 IF XR=1 THEN 1180
  232. 1160 GOSUB 3170
  233. 1170 GOSUB 2900
  234. 1180 GOSUB 2290
  235. 1190 RETURN
  236. 1200 REM
  237. 1210 REM  *INSPECT FILE*
  238. 1220 REM
  239. 1230 CALL CLEAR
  240. 1240 PRINT "USE FILE IN MEMORY?(Y/N)":::
  241. 1250 GOSUB 3960
  242. 1260 IF XR=1 THEN 1290
  243. 1270 GOSUB 3170
  244. 1280 GOSUB 2900
  245. 1290 GOSUB 2570
  246. 1300 RETURN
  247. 1310 REM
  248. 1320 REM  *END SESSION*
  249. 1330 REM
  250. 1340 GOSUB 3170
  251. 1350 PRINT ::"CONTINUE THE SESSION?(Y/N)":::
  252. 1360 GOSUB 3960
  253. 1370 IF XR=1 THEN 860
  254. 1380 REM
  255. 1390 PRINT :::"PROGRAM TERMINATED":::
  256. 1400 FOR L=1 TO 500
  257. 1410 NEXT L
  258. 1420 CALL CLEAR
  259. 1430 END
  260. 1440 REM  **************
  261. 1450 REM  *TAKE A GUESS*
  262. 1460 REM  **************
  263. 1470 REM
  264. 1480 P=1
  265. 1490 CALL CLEAR
  266. 1500 PRINT "LEARNING SESSION":"===============":::
  267. 1510 REM
  268. 1520 REM  CHARACTERISTIC
  269. 1530 REM
  270. 1540 M$=Q1$&C$(P)&Q2$
  271. 1550 GOSUB 4080
  272. 1560 GOSUB 3960
  273. 1570 IF XR=1 THEN 1750
  274. 1580 REM
  275. 1590 REM      WRONG
  276. 1600 REM
  277. 1610 IF RL(P)=999 THEN 1680
  278. 1620 P=RL(P)
  279. 1630 PRINT ::
  280. 1640 GOTO 1540
  281. 1650 REM
  282. 1660 REM   I GIVE UP!
  283. 1670 REM
  284. 1680 GOSUB 2060
  285. 1690 RL(P)=N+1
  286. 1700 GOSUB 2180
  287. 1710 GOTO 2000
  288. 1720 REM
  289. 1730 REM  ACTUAL ITEM
  290. 1740 REM
  291. 1750 PRINT :::
  292. 1760 M$=Q1$&A$(P)&Q2$
  293. 1770 GOSUB 4080
  294. 1780 GOSUB 3960
  295. 1790 IF XR=1 THEN 1970
  296. 1800 REM
  297. 1810 REM     WRONG
  298. 1820 REM
  299. 1830 IF P=LL(P)THEN 1900
  300. 1840 P=LL(P)
  301. 1850 PRINT ::
  302. 1860 GOTO 1540
  303. 1870 REM
  304. 1880 REM   I GIVE UP!
  305. 1890 REM
  306. 1900 GOSUB 2060
  307. 1910 LL(P)=N+1
  308. 1920 GOSUB 2180
  309. 1930 GOTO 2000
  310. 1940 REM
  311. 1950 REM    CORRECT!
  312. 1960 REM
  313. 1970 PRINT ::::". . . I THOUGHT SO!"::::
  314. 1980 FOR L=1 TO 500
  315. 1990 NEXT L
  316. 2000 RETURN
  317. 2010 REM
  318. 2020 REM  ****************
  319. 2030 REM  *LEARN NEW ITEM*
  320. 2040 REM  ****************
  321. 2050 REM
  322. 2060 CALL CLEAR
  323. 2070 PRINT "I GIVE UP!":"==========":::
  324. 2080 PRINT "WHAT IS THE ANSWER?"::
  325. 2090 INPUT T1$
  326. 2100 PRINT ::"I SEE...":::"WHAT'S DISTINGUISHES"::T1$::"FROM"::A$(P);"?":::
  327. 2110 INPUT T2$
  328. 2120 RETURN
  329. 2130 REM
  330. 2140 REM  **************
  331. 2150 REM  *UPDATE LINKS*
  332. 2160 REM  **************
  333. 2170 REM
  334. 2180 N=N+1
  335. 2190 C$(N)=T2$
  336. 2200 A$(N)=T1$
  337. 2210 LL(N)=N
  338. 2220 RL(N)=999
  339. 2230 RETURN
  340. 2240 REM
  341. 2250 REM  ************
  342. 2260 REM  *LIST ITEMS*
  343. 2270 REM  ************
  344. 2280 REM
  345. 2290 CALL CLEAR
  346. 2300 PRINT "LIST FILE":"=========":::
  347. 2310 PRINT "WANT A PRINTOUT?(Y/N)"::
  348. 2320 GOSUB 3960
  349. 2330 IF XR=0 THEN 2380
  350. 2340 PRINT "ENTER DEVICENAME:"::
  351. 2350 INPUT DN$
  352. 2360 DN=1
  353. 2370 OPEN #DN:DN$
  354. 2380 FOR L=0 TO DN
  355. 2390 PRINT #L:"THE FOLLOWING ITEMS ARE IN":"THE FILE: ";FN$::
  356. 2400 NEXT L
  357. 2410 FOR L=1 TO N
  358. 2420 FOR L2=0 TO DN
  359. 2430 PRINT #L2:A$(L)
  360. 2440 NEXT L2
  361. 2450 NEXT L
  362. 2460 IF DN=0 THEN 2490
  363. 2470 CLOSE #DN
  364. 2480 DN=0
  365. 2490 PRINT :::
  366. 2500 GOSUB 3800
  367. 2510 RETURN
  368. 2520 REM
  369. 2530 REM  **************
  370. 2540 REM  *INSPECT FILE*
  371. 2550 REM  **************
  372. 2560 REM
  373. 2570 CALL CLEAR
  374. 2580 PRINT "INSPECT FILE":"============"::::
  375. 2590 PRINT "WANT A PRINTOUT?(Y/N)"::
  376. 2600 GOSUB 3960
  377. 2610 IF XR=0 THEN 2660
  378. 2620 PRINT "ENTER DEVICENAME:"::
  379. 2630 INPUT DN$
  380. 2640 DN=1
  381. 2650 OPEN #DN:DN$
  382. 2660 FOR L=0 TO DN
  383. 2670 PRINT #L:"THE FOLLOWING ITEMS ARE IN":"THE FILE: ";FN$::
  384. 2680 NEXT L
  385. 2690 FOR L=1 TO N
  386. 2700 FOR L2=0 TO DN
  387. 2710 PRINT #L2:"   L -";L
  388. 2720 PRINT #L2:"C$(L)-";C$(L)
  389. 2730 PRINT #L2:"A$(L)-";A$(L)
  390. 2740 PRINT #L2:"  LL -";LL(L)
  391. 2750 PRINT #L2:"  RL -";RL(L)
  392. 2760 PRINT #L2:
  393. 2770 NEXT L2
  394. 2780 NEXT L
  395. 2790 IF DN=0 THEN 2820
  396. 2800 CLOSE #DN
  397. 2810 DN=0
  398. 2820 PRINT ::
  399. 2830 GOSUB 3800
  400. 2840 RETURN
  401. 2850 REM
  402. 2860 REM   ***********
  403. 2870 REM   *OPEN FILE*
  404. 2880 REM   ***********
  405. 2890 REM
  406. 2900 CALL CLEAR
  407. 2910 PRINT "LOAD FROM:"::::TAB(5);"1 - DISK":::TAB(5);"2 - CASSETTE"::::::
  408. 2920 XT=2
  409. 2930 GOSUB 3880
  410. 2940 IF XK=2 THEN 2980
  411. 2950 INPUT "FILENAME: DSK":FN$
  412. 2960 FN$="DSK"&FN$
  413. 2970 GOTO 2990
  414. 2980 FN$="CS1"
  415. 2990 OPEN #1:FN$,SEQUENTIAL,INPUT ,INTERNAL,FIXED 192
  416. 3000 PRINT :::TAB(7);"LOADING FILE..."
  417. 3010 REM
  418. 3020 REM  GET DATA
  419. 3030 REM
  420. 3040 INPUT #1:N
  421. 3050 FOR L=1 TO N
  422. 3060 INPUT #1:C$(L),LL(L),A$(L),RL(L)
  423. 3070 NEXT L
  424. 3080 CLOSE #1
  425. 3090 PRINT ::"THERE ARE";N:"RECORDS ON FILE.":::
  426. 3100 FOR L=1 TO 500
  427. 3110 NEXT L
  428. 3120 RETURN
  429. 3130 REM   ************
  430. 3140 REM   *SAVE  FILE*
  431. 3150 REM   ************
  432. 3160 REM
  433. 3170 CALL CLEAR
  434. 3180 PRINT "SAVE THIS FILE?(Y/N)":::::
  435. 3190 GOSUB 3960
  436. 3200 IF XR=1 THEN 3220
  437. 3210 GOTO 3430
  438. 3220 PRINT "SAVE TO:"::::TAB(5);"1 - DISK":::TAB(5);"2 - CASSETTE"::::::
  439. 3230 XT=2
  440. 3240 GOSUB 3880
  441. 3250 IF XK=2 THEN 3290
  442. 3260 INPUT "FILENAME: DSK":FN$
  443. 3270 FN$="DSK"&FN$
  444. 3280 GOTO 3300
  445. 3290 FN$="CS1"
  446. 3300 OPEN #1:FN$,SEQUENTIAL,INTERNAL,OUTPUT,FIXED 192
  447. 3310 PRINT :::TAB(7);"SAVING FILE..."
  448. 3320 REM
  449. 3330 REM  SAVE DATA
  450. 3340 REM
  451. 3350 PRINT #1:N
  452. 3360 FOR L=1 TO N
  453. 3370 PRINT #1:C$(L),LL(L),A$(L),RL(L)
  454. 3380 NEXT L
  455. 3390 CLOSE #1
  456. 3400 PRINT :::"THERE ARE NOW";N:"RECORDS ON FILE.":::
  457. 3410 FOR L=1 TO 500
  458. 3420 NEXT L
  459. 3430 RETURN
  460. 3440 REM
  461. 3450 REM  ****************
  462. 3460 REM  *START NEW FILE*
  463. 3470 REM  ****************
  464. 3480 REM
  465. 3490 CALL CLEAR
  466. 3500 PRINT "START NEW FILE":"=============="::::
  467. 3510 PRINT "ENTER FIRST CHARACTERISTIC:"::
  468. 3520 INPUT C$(1)
  469. 3530 PRINT :"ENTER THE FIRST ANSWER:"::
  470. 3540 INPUT A$(1)
  471. 3550 LL(1)=1
  472. 3560 RL(1)=999
  473. 3570 N=1
  474. 3580 PRINT :::
  475. 3590 GOSUB 3800
  476. 3600 RETURN
  477. 3610 REM
  478. 3620 REM  *****************
  479. 3630 REM  *               *
  480. 3640 REM  *  SUBROUTINES  *
  481. 3650 REM  *               *
  482. 3660 REM  *****************
  483. 3670 REM
  484. 3680 REM
  485. 3690 REM   *KEY-LET/B*
  486. 3700 REM
  487. 3710 CALL SOUND(150,1400,0)
  488. 3720 CALL KEY(0,XK,XS)
  489. 3730 IF XS=0 THEN 3720
  490. 3740 XR=POS(XR$,CHR$(XK),1)
  491. 3750 IF XR=0 THEN 3720
  492. 3760 RETURN
  493. 3770 REM
  494. 3780 REM   *KEY-CON/B*
  495. 3790 REM
  496. 3800 PRINT " PRESS ANY KEY TO CONTINUE "
  497. 3810 CALL SOUND(150,600,5)
  498. 3820 CALL KEY(3,XK,XS)
  499. 3830 IF XS=0 THEN 3820
  500. 3840 RETURN
  501. 3850 REM
  502. 3860 REM   *KEY-NUM/B*
  503. 3870 REM
  504. 3880 CALL SOUND(150,1000,0)
  505. 3890 CALL KEY(3,XK,XS)
  506. 3900 IF (XK<49)+(XK>XT+48)+(XS=0)THEN 3890
  507. 3910 XK=XK-48
  508. 3920 RETURN
  509. 3930 REM
  510. 3940 REM   *KEY-ANS/B*
  511. 3950 REM
  512. 3960 CALL SOUND(150,800,0)
  513. 3970 CALL KEY(3,XK,XS)
  514. 3980 IF XS=0 THEN 3970
  515. 3990 IF XK<>89 THEN 4020
  516. 4000 XR=1
  517. 4010 GOTO 4040
  518. 4020 IF XK<>78 THEN 3970
  519. 4030 XR=0
  520. 4040 RETURN
  521. 4050 REM
  522. 4060 REM  *WRAP/B*
  523. 4070 REM
  524. 4080 X1=0
  525. 4090 M$=M$&" "
  526. 4100 X2=POS(M$," ",X1+1)
  527. 4110 PRINT SEG$(M$,X1+1,X2-X1);
  528. 4120 IF X2=LEN(M$)THEN 4150
  529. 4130 X1=X2
  530. 4140 GOTO 4100
  531. 4150 RETURN
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  
  542.  
  543.  
  544.