home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1997 #3
/
amigamamagazinepolishissue03-1
/
ma_1995
/
12
/
ami044.txt
< prev
next >
Wrap
Text File
|
1997-04-07
|
5KB
|
234 lines
-----------------Uwaga! Fragmenty w >...< boldem------------------
SYSTEMY EKSPERCKIE
<lead>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").
<a>Krzysztof Prusik
<txt>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.
<l>Screen Open 0,640,256,2,Hires : Clw
Print
Print " Czeôê, nazywam sië HAL"
Print " A Ty, jak masz na imië?";
Input IMIE$
<txt>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.
<l>' 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
<sr>Wnioskowanie
<txt>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!---------------------------
<l>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
<txt>I tu zaczynajâ sië
<sr>Schody
<txt>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):
<l>If Upper$(ODPOWIEDZ$)="TAK"
<txt>Wtedy wielkoôê liter nie ma znaczenia, bo i tak wszystkie
zostanâ zamienione na duûe.
<przyp>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.
<txt>2. A co bëdzie, gdy ktoô za wprowadzonâ odpowiedziâ dopisze
spacjë? Moûemy temu zaradziê nastëpujâco:
<l>If Left$(Upper$(ODPOWIEDZ$),3)="TAK)
<txt>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".
<l>If Instr(Upper$(ODPOWIEDZ$),"TAK")<>0
<txt>Funkcja >Instr< zwraca wartoôê róûnâ od zera, gdy w tekôcie
przeszukiwanym >Upper$(ODPOWIEDZ$)<, znajdzie sië poszukiwane "TAK".
<txt>4. No dobrze, ale jeôli ktoô zamiast "tak", wpisze np.
"oczywiôcie"? Ha! Trzeba uwzglëdniê wszystkie moûliwe odpowiedzi.
<l>If ODPOWIEDZ$="tak" or ODPOWIEDZ$="oczywiôcie" or ...
<txt>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:
<l>Print " Zdecyduj sië, albo z Tobâ nie rozmawiam."
<txt>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:
<l>Print " Nie rozumiem tego, co napisaîeô, ";IMIE$
Print " Nie moûesz wyraûaê sië jaôniej?"
<txt>i powtórzy swoje ostatnie pytanie.