-----------------Uwaga! Fragmenty w >...< boldem------------------ SYSTEMY EKSPERCKIE Miîe Panie, szanowni Panowie... Dzisiaj stawiamy przed sobâ wielce ambitne zadanie: postaramy sië stworzyê "sztucznâ inteligencjë" o nazwie HAL (zupeînie jak w "Odysei kosmicznej 2001"). Krzysztof Prusik Jasne jest juû chyba dla wszystkich, ûe nawet tak zaawansowany technologicznie komputer, jak Amiga, bez odpowiedniego oprogramowania nie jest w stanie wykonywaê nawet elementarnych czynnoôci (nie wspominajâc o myôleniu). Zabierzmy sië wiëc do dzieîa i sprawmy, ûeby nasza Amisia "odezwaîa sië" przyjaznym nam gîosem. Screen Open 0,640,256,2,Hires : Clw Print Print " Czeôê, nazywam sië HAL" Print " A Ty, jak masz na imië?"; Input IMIE$ Po wykonaniu tych kilku rozkazów Amiga zachowa sië juû jak superkomputer HAL, dyplomatycznie przedstawiajâc sië i pytajâc uûytkownika o imië. Gdybyômy do naszego komputera podîâczyli czujniki gîosu, lub nawet linii papilarnych, Amiga szybko i bez problemu sprawdziîaby, kim jesteômy, ale tak, musi nam zadaê odpowiednie pytanie, ûeby wiedzieê z kim ma doczynienia. ' Wnioskowanie If IMIE$="Staô" ZNAM_GO=True Else ZNAM_GO=False End If ' Wyprowadzenie wyniku If ZNAM_GO Print " Miîo Cië znowu widzieê, ";IMIE$ Else Print " Niestety nie mieliômy jeszcze okazji sië zapoznaê" IDENTYFIKACJA_OSOBY End If Wnioskowanie Jeûeli uûytkownik wpisze "Staô" (przypuôêmy, ûe tak ma na imië), komputer bëdzie juû wiedziaî, kto siedzi przy klawiaturze. W przeciwnym razie moûe zadaê serië pytaï uzupeîniajâcych, a nawet spróbowaê samodzielnie wnioskowaê (i ewentualnie zapisaê nowo zdobyte przez siebie informacje na dysk, w celu przyszîego ich wykorzystania). Patrz rys. 1. ----------------------!Rys.1!--------------------------- Procedure IDENTYFIKACJA_OSOBY ' zmienne globalne Shared IMIE$,WIEK,KOBIETA ' wycinamy jednâ literë z prawego koïca KONCOWKA$=Right$(IMIE$,1) ' próba wnioskowania: czy mëûczyzna? If KONCOWKA$<>"a" Print " Myôlë, ûe jesteô pîci mëskiej" Print " Mylë sië? "; Else Print " Czyûbym miaî doczynienia z kobietâ? "; End If Input ODPOWIEDZ$ ' ustalamy zmiennâ KOBIETA If ODPOWIEDZ$="tak" KOBIETA=True Else KOBIETA=False End If ' wyprowadzenie odpowiedzi HAL-a If KOBIETA Print " Bardzo lubië rozmawiaê z dziewczynami" Else Print " I jeszcze jeden facet przy komputerze" End If ' ile masz lat? Print IMIE$;"Ile masz lat?"; Input WIEK ' wnioskujemy i odpowiadamy If WIEK>15 Print "Wiëc jesteô juû dorosî"; If KOBIETA Print "â kobietâ" Else Print "ym mëûczyznâ" End If Else Print "A wiëc jesteô juû prawie dorosî"; If KOBIETA Print "a" Else Print "y" End If End If End Proc I tu zaczynajâ sië Schody 1. A co bëdzie, gdy uûytkownik programu napisze odpowiedú duûymi literami? Bo przecieû, pomimo tego, ûe dla nas "TAK"="Tak"="tak"="TaK", to jednak dla komputera sâ to zupeînie róûne sîowa. Moûna temu zaradziê wykonujâc (w odpowiednich miejscach programu): If Upper$(ODPOWIEDZ$)="TAK" Wtedy wielkoôê liter nie ma znaczenia, bo i tak wszystkie zostanâ zamienione na duûe. Uwaga! Upper$ AMOS-a nie uwzglëdnia polskich znaków w standardzie AmigaPL. Na dysku doîâczonym do ksiâûki (AMOS Pro w praktyce, wyd. RaWi sc.) umieôciîem wîasnâ procedurë, która eliminuje të wadë AMOS-a. 2. A co bëdzie, gdy ktoô za wprowadzonâ odpowiedziâ dopisze spacjë? Moûemy temu zaradziê nastëpujâco: If Left$(Upper$(ODPOWIEDZ$),3)="TAK) Dziëki temu pod uwagë bëdzie brany tylko jeden trzyliterowy wyraz z lewej strony odpowiedzi. 3. A jeôli uûytkownik wciônie spacjë przed wprowadzonâ przez siebie odpowiedziâ? Hmm. Moûemy po prostu przeszukaê ciâg wpisany przez uûytkownika i sprawdziê, czy wystëpuje w tam sîowo "TAK". If Instr(Upper$(ODPOWIEDZ$),"TAK")<>0 Funkcja >Instr< zwraca wartoôê róûnâ od zera, gdy w tekôcie przeszukiwanym >Upper$(ODPOWIEDZ$)<, znajdzie sië poszukiwane "TAK". 4. No dobrze, ale jeôli ktoô zamiast "tak", wpisze np. "oczywiôcie"? Ha! Trzeba uwzglëdniê wszystkie moûliwe odpowiedzi. If ODPOWIEDZ$="tak" or ODPOWIEDZ$="oczywiôcie" or ... 5. A jak komputer zareaguje na odpowiedú "nie wiem", "nie chcë powiedzieê" albo "nie mam ochoty z Tobâ gadaê"? Hmm. Moûe niech wypowie w takim wypadku po prostu: Print " Zdecyduj sië, albo z Tobâ nie rozmawiam." i powtórzy swoje pytanie. 6. Brr! Gdy to wszystko uwzglëdnimy i zakodujemy w postaci programu w AMOS-ie, HAL niestety nadal bëdzie niedoskonaîy i moûe sië nawet zdarzyê, ûe nie zrozumie tego, co "mówi" do niego osoba siedzâca przed klawiaturâ. Bo przecieû w jëzyku naturalnym istniejâ tysiâce zwrotów typu: "miîo sië z Tobâ rozmawia, HAL". Co bëdzie, gdy uûytkownik naszego programu uûyje jednego z nich? Czy HAL musi zgîupieê? Aleû nie, niech po prostu poprosi: Print " Nie rozumiem tego, co napisaîeô, ";IMIE$ Print " Nie moûesz wyraûaê sië jaôniej?" i powtórzy swoje ostatnie pytanie.